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

批量导入TXT文件到MySQL时触发1054错误,求问题排查

解决MySQL 1054错误的问题

嘿,这个1054错误我太熟啦!咱们先搞清楚问题出在哪,再给你把代码改得更靠谱~

错误根源:SQL语句里的变量没正确传递

你写的cursor.execute('INSERT INTO clamp_test VALUES(default,file_content)')里,file_content被MySQL当成列名了,但你的clamp_test表只有ID和LastName两列,数据库找不到叫file_content的列,自然就触发1054错误啦。

正确的写法:参数化查询(推荐)

要让MySQL把file_content当成变量值,得用参数化查询的方式——这不仅能解决错误,还能防止SQL注入,安全性拉满。另外还有几个代码细节可以优化,比如不要每次循环都连数据库,太浪费资源了。

修正后的完整代码

import MySQLdb
import os

# 先定义好目标路径
target_path = "dir_path"
file_list = os.listdir(target_path)

# 把数据库连接放在循环外面,只建立一次连接
db = MySQLdb.connect("localhost", "root", "password", "myblog")
cursor = db.cursor()

try:
    for filename in file_list:
        # 用os.path.join拼接路径,避免Windows/Linux路径分隔符的兼容性问题
        full_file_path = os.path.join(target_path, filename)
        # 用with语句自动管理文件资源,不用手动调用close
        with open(full_file_path, 'r') as file:
            # 读取一行内容,加strip()去掉多余的换行或空格
            content = file.readline().strip()
        # 参数化查询:%s是占位符,后面的元组传递实际值
        cursor.execute('INSERT INTO clamp_test (LastName) VALUES (%s)', (content,))
    # 所有插入操作完成后统一提交
    db.commit()
    print("所有文件内容导入成功!")
except Exception as e:
    # 出错时回滚,避免产生脏数据
    db.rollback()
    print(f"导入失败:{str(e)}")
finally:
    # 无论成功失败,最后都要关闭游标和数据库连接
    cursor.close()
    db.close()

额外优化点说明

  • 参数化查询:用%s占位符代替直接写变量,让数据库正确识别值而非列名,同时避免SQL注入风险。
  • 连接复用:把数据库连接放在循环外,减少频繁建立/关闭连接的性能开销。
  • 路径拼接:os.path.join自动适配不同系统的路径分隔符,比手动拼接path+x更可靠。
  • with语句:自动关闭文件,避免忘记close导致的资源泄漏问题。
  • 异常处理:用try-except捕获错误并回滚,保证数据库的数据一致性。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.29 06:49:41