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

使用ENCLOSED BY时MySQL LOAD DATA语句出现编程错误求助

解决cursor.execute执行LOAD DATA时ENCLOSED BY子句报错的问题

问题根源

MySQL命令行能正常解析ENCLOSED BY "",但Python的数据库驱动(比如pymysql、mysql-connector)处理字符串时,会把连续双引号当成语法错误,或者转义逻辑出问题,导致ProgrammingError/OperationalError。

可行解决办法

1. 直接删掉ENCLOSED BY子句(最省事)

如果你的CSV里没有用任何字符包裹字段,完全可以去掉ENCLOSED BY ""这一行——MySQL默认就是不使用字段包围符,不会影响数据导入效果。修改后的SQL如下:

LOAD DATA LOCAL INFILE
'/home/ubuntu/test.csv'
INTO TABLE app_data
CHARACTER SET UTF8MB4 FIELDS TERMINATED BY ',' 
IGNORE 1 ROWS
LINES TERMINATED BY '\r\n'

2. 换用单引号定义空包围符

如果一定要明确指定“无包围符”,把双引号换成单引号,同时注意Python字符串的写法:

  • 用三单引号包裹SQL,内部直接写ENCLOSED BY '':
sql = '''
LOAD DATA LOCAL INFILE
'/home/ubuntu/test.csv'
INTO TABLE app_data
CHARACTER SET UTF8MB4 FIELDS TERMINATED BY ',' 
IGNORE 1 ROWS ENCLOSED BY ''
LINES TERMINATED BY '\r\n'
'''
cursor.execute(sql)
  • 用三双引号包裹也可以,内部单引号不用转义:
sql = """
LOAD DATA LOCAL INFILE
'/home/ubuntu/test.csv'
INTO TABLE app_data
CHARACTER SET UTF8MB4 FIELDS TERMINATED BY ',' 
IGNORE 1 ROWS ENCLOSED BY ''
LINES TERMINATED BY '\r\n'
"""
cursor.execute(sql)

3. 检查连接是否开启LOCAL INFILE权限

要是上面的方法还报错,得确认数据库连接时有没有开启本地文件导入权限:

  • 用pymysql的话,连接参数加local_infile=True:
import pymysql
conn = pymysql.connect(
    host='localhost',
    user='你的用户名',
    password='你的密码',
    db='目标数据库',
    local_infile=True
)
cursor = conn.cursor()
  • 用mysql-connector的话,加allow_local_infile=True:
import mysql.connector
conn = mysql.connector.connect(
    host='localhost',
    user='你的用户名',
    password='你的密码',
    database='目标数据库',
    allow_local_infile=True
)
cursor = conn.cursor()

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.24 07:53:26