You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Python执行MySQL LOAD DATA导入CSV时OPTIONALLY ENCLOSED BY触发语法错误如何解决

问题原因

你对问题的判断完全正确:字符串内部未转义的双引号被Python识别为了整个SQLCMD字符串的闭合标记,导致后续代码的语法解析全部错乱,最终触发续行符后存在非法字符的报错。以下是可直接落地的解决方案:


解决方案

方案1:使用三引号包裹SQL字符串(最推荐)

三原生支持多行字符串格式,无需手动添加行续行符\,内部的单、双引号都会被识别为普通字符无需额外转义。搭配原始字符串前缀r还可以避免\n被Python提前转义为实际换行符,更符合MySQL语法要求:

SQLCMD = r"""LOAD DATA INFILE '/Users/v***/MySQLfiles/salaries.csv'
INTO TABLE salaries.salaries
FIELDS TERMINATED BY ',' OPTIONALLY ENCLOSED BY '"'
LINES TERMINATED BY '\n'
IGNORE 1 ROWS"""

写完可直接执行print(SQLCMD)验证输出的SQL语句是否和预期完全一致。

方案2:转义内部双引号

如果坚持用单组双引号包裹整个SQL字符串,需要在内部的双引号前添加转义符\,同时注意每行末尾的续行符\后不能有空格、注释等任何多余字符:

SQLCMD = "LOAD DATA INFILE '/Users/v***/MySQLfiles/salaries.csv' \
INTO TABLE salaries.salaries \
FIELDS TERMINATED BY ',' OPTIONALLY ENCLOSED BY '\"' \
LINES TERMINATED BY '\\n' \
IGNORE 1 ROWS"

方案3:切换外层字符串的引号类型

改用单引号包裹整个SQL字符串,此时内部的双引号会被识别为普通字符,仅需要转义路径中出现的单引号即可:

SQLCMD = 'LOAD DATA INFILE \'/Users/v***/MySQLfiles/salaries.csv\' \
INTO TABLE salaries.salaries \
FIELDS TERMINATED BY \',\' OPTIONALLY ENCLOSED BY \'"\' \
LINES TERMINATED BY \'\\n\' \
IGNORE 1 ROWS'

内容的提问来源于stack exchange,提问作者Bean Huang

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.02 03:57:03