Python列表插入MySQL数据库时出现错误,寻求解决方案
解决Python批量插入MySQL的错误问题
我来帮你分析下代码里的问题,然后给你修正后的版本:
原代码的核心问题
- 数据库连接参数缺失:
my.connect()没有传入必要的连接信息(比如主机地址、用户名、密码、要连接的数据库名),MySQL根本不知道要连接到哪里。 executemany用法错误:你把数据列表转成字符串后用%拼接进SQL,这完全搞错了executemany的用法。这个方法的第二个参数就是要批量插入的数据列表,不需要手动拼接SQL,这种错误写法还会导致语法错误,甚至存在SQL注入风险。- SQL语句不规范:没有指定要插入的列名,虽然如果表的列顺序和数据完全匹配也能运行,但指定列名能避免因表结构变化导致的错误,代码可读性也更强。
修正后的代码
import MySQLdb as my # 1. 补充数据库连接参数,根据你的实际配置修改 db = my.connect( host='localhost', # 数据库主机地址,通常是localhost user='your_username', # 你的MySQL用户名 passwd='your_password', # 你的MySQL密码 db='your_database_name' # 要连接的数据库名称 ) cursor = db.cursor() data = [ ('Jane','dffd','sdas','sdas'), ('Jane','dffd','sdas','sdas'), ('Jane','dffd','sdas','sdas') ] # 2. 正确使用executemany:第一个参数是带占位符的SQL,第二个是数据列表 # 这里假设test表有4个列,比如name, col2, col3, col4,你需要替换成实际的列名 sql = 'INSERT INTO test (name, col2, col3, col4) VALUES (%s, %s, %s, %s)' cursor.executemany(sql, data) db.commit() cursor.close() # 最好也关闭游标,避免资源泄漏 db.close()
额外说明
- 一定要把
your_username、your_password、your_database_name替换成你自己的MySQL配置信息。 - 如果你的
test表列名不是示例里的name, col2, col3, col4,一定要改成实际的列名,保证和数据的顺序严格对应。 - 执行完批量插入后必须调用
commit(),不然数据不会真正写入数据库。 - 养成关闭游标和数据库连接的习惯,避免长期占用数据库资源。
内容的提问来源于stack exchange,提问作者user7718611
相关产品推荐
相关产品推荐

