如何将TXT文件插入MySQL表?LOAD_FILE报错求助
解决LOAD_FILE插入MySQL时的非空约束错误
错误本质
LOAD_FILE('/APPLES/transcription.txt')返回了NULL,而你的transcript列设置了非空约束,因此触发1048完整性错误。以下是具体排查和解决步骤:
1. 验证文件路径与可读性
- 先在MySQL客户端执行
SELECT LOAD_FILE('/APPLES/transcription.txt');,确认是否能返回文件内容:- 如果返回
NULL,说明MySQL服务器无法访问该文件(注意:路径是MySQL所在服务器的绝对路径,不是你的应用服务器路径)。
- 如果返回
- 检查文件是否存在:在MySQL服务器上执行
ls /APPLES/transcription.txt(Linux)或dir \APPLES\transcription.txt(Windows)确认路径正确性。
2. 调整文件与目录权限
- MySQL运行用户(通常是
mysql用户)需要对文件和上级目录有读权限:# 给文件设置读权限 chmod 644 /APPLES/transcription.txt # 给上级目录设置可访问权限 chmod 755 /APPLES
3. 检查MySQL配置限制
- 执行
SHOW VARIABLES LIKE 'secure_file_priv';查看参数:- 如果值为某个特定目录,你的
transcription.txt必须放在该目录下才能被LOAD_FILE读取; - 如果值为
NULL,说明LOAD_FILE被禁用,需要修改my.cnf(或my.ini),设置secure_file_priv = "/允许的目录路径",然后重启MySQL服务。
- 如果值为某个特定目录,你的
4. 替代方案:Python读取文件后插入
绕开MySQL的LOAD_FILE限制,直接在代码中读取文件内容作为参数传入:
with open('/APPLES/transcription.txt', 'r', encoding='utf-8') as f: transcript_content = f.read() cursor.execute( "insert into `movies` (`movie_name`,`movie_file`,`movie_password`,`transcript`) values (%s,%s,%s,%s)", [moviename, moviefile, password, transcript_content] )
内容的提问来源于stack exchange,提问作者Ehds
相关产品推荐
相关产品推荐

