MacOS下Python用LOAD DATA LOCAL INFILE导入CSV到MySQL报错求助
分步解决方案
1. 开启Python客户端的本地文件导入权限(核心步骤)
你之前只开启了MySQL服务器端的local_infile,但Python的mysql.connector客户端默认禁用本地文件导入,必须在创建数据库连接时显式开启:
import mysql.connector # 创建连接时添加local_infile=True参数 mydb = mysql.connector.connect( host="localhost", user="你的数据库用户名", password="你的数据库密码", database="目标数据库名", local_infile=True # 这行是关键,必须添加 ) my_c = mydb.cursor()
2. 修正LOAD DATA语句的语法错误
你的SQL语句存在两处问题:换行符写法错误、字符串转义逻辑混乱,修正后的语句如下:
sql = '''LOAD DATA LOCAL INFILE "/test1/Desktop/Python/Practice/body.csv" INTO TABLE POQ COLUMNS TERMINATED BY "," ESCAPED BY '"' LINES TERMINATED BY '\n' IGNORE 1 LINES''' my_c.execute(sql) mydb.commit() # 必须执行提交,否则数据不会写入数据库
注意:LINES TERMINATED BY后面要用'\n'表示换行,不能直接换行;执行完SQL后一定要调用commit()提交事务。
3. 确保服务器端local_infile持续生效
如果之前用set global local_infile=true;临时开启,重启MySQL服务后会失效,Mac上重启MySQL的方法:
- 打开「系统偏好设置」→ 找到MySQL图标 → 先点「Stop MySQL Server」,再点「Start MySQL Server」
- 重启后登录mysqlsh,执行
show global variables like 'local_infile';,确认返回值为ON
4. 解决Mac上找不到my.cnf的问题(可选,永久开启服务器端权限)
Mac Mojave默认没有生成my.cnf,你可以手动创建来永久开启权限:
- 打开终端,执行:
sudo touch /etc/my.cnf sudo nano /etc/my.cnf
- 在nano编辑器中输入以下内容:
[mysqld] local_infile=ON [mysql] local_infile=ON
- 按
Ctrl+O保存,按Ctrl+X退出编辑器 - 重启MySQL服务(步骤3的方法),之后服务器端的local_infile会永久保持开启状态
5. 检查文件路径与权限
- 验证文件路径正确性:终端执行
ls "/test1/Desktop/Python/Practice/body.csv",能看到文件说明路径没问题 - 给文件添加可读权限:终端执行
chmod +r "/test1/Desktop/Python/Practice/body.csv"
内容的提问来源于stack exchange,提问作者Ojasveer
相关产品推荐
相关产品推荐

