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

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,你可以手动创建来永久开启权限:

  1. 打开终端,执行:
sudo touch /etc/my.cnf
sudo nano /etc/my.cnf
  1. 在nano编辑器中输入以下内容:
[mysqld]
local_infile=ON

[mysql]
local_infile=ON
  1. 按Ctrl+O保存,按Ctrl+X退出编辑器
  2. 重启MySQL服务(步骤3的方法),之后服务器端的local_infile会永久保持开启状态

5. 检查文件路径与权限

  • 验证文件路径正确性:终端执行ls "/test1/Desktop/Python/Practice/body.csv",能看到文件说明路径没问题
  • 给文件添加可读权限:终端执行chmod +r "/test1/Desktop/Python/Practice/body.csv"

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.15 15:45:42