【问题标题】:Escaping MySQL LOAD DATA INFILE command转义 MySQL LOAD DATA INFILE 命令
【发布时间】:2018-01-15 18:17:40
【问题描述】:

我想在 Python 3.6 中转义这个命令,因为我想用它在大量 csv 文件中运行它。

for filename in glob.glob(CSV_FOLDER_LOCATION + "/*.csv"):
    # Adds quotes to filename because of the problem caused by spaces in path names
    quoted_filename = '"' + filename + '"'
    os.system(MYSQL_LOCATION + r" -u root LOAD DATA INFILE " + quoted_filename + " INTO TABLE " + TABLE_NAME +
              r" CHARACTER SET ascii FIELDS TERMINATED BY ',' ENCLOSED BY '"' LINES TERMINATED BY '/n' IGNORE 1 LINES")

逗号显示为空格。这是输出:

C:/Program Files/MySQL/MySQL Server 5.7/bin/mysql.exe -u root LOAD DATA INFILE "C:/prog/csv/CSVFiles\CC19711977ZWEIG-ZZ.csv" INTO TABLE vcc2.tmp_cards CHARACTER SET ascii FIELDS TERMINATED BY   ENCLOSED BY '"' LINES TERMINATED BY '/n' IGNORE 1 LINES

转义该字符串的正确方法是什么?

编辑:添加图像以进行说明:

也许我真的很厚并且遗漏了一些明显的东西,但是我怎么能“原始字符串”它 C 风格?

【问题讨论】:

  • 你为什么要通过os.system()这样做?
  • 请给我你的建议!
  • 嗯,有一个python library made for interacting with MySQL,所以我可能会使用它。
  • 它必须是独立的,这只是一个非常简单的脚本,需要将文件夹中的所有CSV文件导入MySQL
  • 您在寻找shlex.quote吗?

标签: python mysql csv


【解决方案1】:

以这种方式逃脱它:

os.system(
            r"LOAD DATA LOCAL INFILE " + '"' + CSV_FOLDER_LOCATION + '/' + filename + '"' + " INTO TABLE " + TABLE_NAME +
            r' CHARACTER SET ascii FIELDS TERMINATED BY ' + '\',\'' + ' ENCLOSED BY ' + '\'"\'' +
            ' LINES TERMINATED BY ' + '\'\\n\'' + ' IGNORE 1 LINES')

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-10-05
    • 2010-11-17
    • 1970-01-01
    • 2017-07-21
    • 2012-06-01
    • 2011-09-01
    相关资源
    最近更新 更多