使用Python从CSV向MySQL导入数据时出现参数未全部使用错误
问题解决:SQL参数不匹配错误
核心原因
你的SQL插入语句里用了%d作为参数占位符,但Python的MySQL驱动(如pymysql、MySQLdb)要求所有数据类型的参数占位符统一用%s——驱动会自动处理类型转换。%d会被Python当成字符串格式化符号,而非SQL参数占位符,导致实际传入的6个元组参数只匹配了5个%s,触发「参数未全部使用」的错误。
修复步骤
- 修正SQL占位符:把
values里的%d替换成%s - 优化cursor创建:将cursor实例化移到循环外,避免重复创建资源
- 提交事务:插入完成后调用
mydb.commit(),确保数据写入数据库 - 可选:批量插入优化:收集所有数据后用
executemany批量插入,大幅提升效率
修复后的代码
单条插入版本
import csv # 假设mydb已经完成正确连接 cursor = mydb.cursor() sql = ("INSERT INTO users (user_id, user_name, user_email, user_password, user_address, is_vendor)" " VALUES(%s, %s, %s, %s, %s, %s)") with open("USERS.csv", "r") as f: data = csv.reader(f) for row in data: print(tuple(row)) cursor.execute(sql, tuple(row)) # 提交事务,确保数据写入 mydb.commit() cursor.close() mydb.close()
批量插入优化版本
import csv # 假设mydb已经完成正确连接 cursor = mydb.cursor() sql = ("INSERT INTO users (user_id, user_name, user_email, user_password, user_address, is_vendor)" " VALUES(%s, %s, %s, %s, %s, %s)") val = [] with open("USERS.csv", "r") as f: data = csv.reader(f) for row in data: val.append(tuple(row)) print(tuple(row)) # 批量插入所有数据 cursor.executemany(sql, val) mydb.commit() cursor.close() mydb.close()
内容的提问来源于stack exchange,提问作者mukesh keswani
相关产品推荐
相关产品推荐

