Python通过CSV导入数据至MySQL失败,请求技术排查解决
Python批量插入CSV数据到MySQL的问题解决
核心错误点
- 参数化语句格式错误:你给
%s加了单引号,这会导致mysql-connector无法正确解析参数,应该直接写%s,不要加任何引号,驱动会自动根据数据类型处理引号和转义。 - 提交事务的方式错误:不能用
mycursor.execute("commit;"),正确的做法是调用连接对象的commit()方法。 - 未处理CSV表头:如果你的CSV文件第一行是表头,循环插入时会把表头当成数据插入,导致类型不匹配错误。
修正后的完整代码
import mysql.connector import csv # 替换成你的数据库账号信息 user = "your_username" password = "your_password" db = "texperts" mydb = mysql.connector.connect( host="localhost", user=user, password=password, database=db ) mycursor = mydb.cursor() with open(r"C:\data\LEARNING\PHYTON\excel\MySQL\texperts\EMPLOYEES.csv") as csv_data: csv_reader = csv.reader(csv_data, delimiter=',') # 跳过CSV表头(如果文件第一行是表头的话) next(csv_reader) for row in csv_reader: print(row) # 注意:VALUES里的%s不要加单引号 sql = "INSERT INTO employee(emp_id, emp_init, first_name, last_name, email, phone, role_id) VALUES(%s,%s,%s,%s,%s,%s,%s)" mycursor.execute(sql, row) print("Record Inserted") # 正确提交事务 mydb.commit() mycursor.close() mydb.close()
额外说明
- 确保CSV里的
emp_id和role_id与数据库字段类型匹配(比如数据库是INT类型,CSV里对应值不要带引号),驱动会自动完成类型转换。 - 调试时可以通过
mycursor.statement查看实际执行的SQL语句,方便排查问题。
内容的提问来源于stack exchange,提问作者Paul Babin
相关产品推荐
相关产品推荐

