Python脚本执行MySQL LOAD DATA LOCAL INFILE报3948错误的解决咨询
解决Python执行LOAD DATA LOCAL INFILE时的"Loading local data is disabled"错误
这个错误是MySQL的默认安全限制导致的——它默认禁用了本地数据加载功能,必须同时在服务器端和你的Python客户端都开启该选项,才能正常使用LOAD DATA LOCAL INFILE。下面分步骤给你解决:
1. 服务器端开启local_infile支持
临时生效(重启MySQL后失效)
登录你的MySQL服务器,执行这条SQL命令:
SET GLOBAL local_infile = 1;
执行完记得重新连接MySQL,这个设置才会生效。
永久生效(修改配置文件)
如果不想每次重启MySQL都重复操作,直接修改MySQL的配置文件:
- Windows Server下找到
my.ini(通常在MySQL安装目录或者C:\ProgramData\MySQL\MySQL Server X.X路径中) - 在
[mysqld]段落下添加一行:local_infile = 1
保存后重启MySQL服务即可。
2. Python客户端(pymysql)开启local_infile支持
你的原连接代码漏掉了关键参数!pymysql默认关闭了本地文件加载支持,必须在connect时显式开启local_infile=True。修改后的代码如下:
import pymysql # 核心是加上local_infile=True参数 con = pymysql.connect( host='localhost', database='test', user='root', password='test123', local_infile=True ) cursor = con.cursor() try: # 格式化后的导入语句更易读 cursor.execute(""" LOAD DATA LOCAL INFILE 'C:/Users/Desktop/Excercise/text1.txt' INTO TABLE general_report FIELDS TERMINATED BY ' ' LINES TERMINATED BY '\r\n' """) con.commit() # 别忘了提交事务,否则数据不会写入表中! print("数据导入成功啦") except Exception as e: con.rollback() print(f"出现问题: {e}") finally: # 养成关闭游标和连接的好习惯 cursor.close() con.close()
额外注意事项
- 确保你的MySQL用户(比如这里的root)拥有
FILE权限,如果没有的话,登录MySQL执行:GRANT FILE ON *.* TO 'root'@'localhost'; FLUSH PRIVILEGES; - 检查你的txt文件路径是否正确,Windows下可以用正斜杠
/或者双反斜杠\\,避免转义问题 - 确认运行Python脚本的用户有读取该txt文件的权限(Windows Server下权限问题很容易被忽略)
内容的提问来源于stack exchange,提问作者Manikandan
相关产品推荐
相关产品推荐

