Python导入CSV至MySQL报错:TypeError: 格式字符串参数不足
解决MySQLdb.ProgrammingError: not enough arguments for format string问题
核心问题与修复步骤
重复字段引发参数不匹配
你的INSERT语句字段列表里重复写了两次sales,导致VALUES部分有9个%s占位符,但CSV每行实际只有8个对应字段(对应release、official、order、date、product、client、sales、quant),参数数量和占位符数量不匹配直接触发了这个错误。
修正字段列表,去掉重复的sales:cursor.execute( "INSERT INTO estoque1 (release, official, `order`, date, product, client, sales, quant) VALUES (%s, %s, %s, %s, %s, %s, %s, %s)", row)关键字冲突问题
order是MySQL的保留关键字,直接作为字段名使用会引发语法错误,必须用反引号`包裹,上面的修正已经包含这一点。验证CSV数据一致性
即使检查过字段对应,仍要确认CSV每行的字段数量是否统一,避免某行缺值或多值导致参数不匹配。可以在循环中加入异常行判断:for idx, row in enumerate(csv_data, start=2): # start=2是跳过表头后的行号 if len(row) != 8: print(f"第{idx}行数据字段数量异常,跳过:{row}") continue print(row) cursor.execute( "INSERT INTO estoque1 (release, official, `order`, date, product, client, sales, quant) VALUES (%s, %s, %s, %s, %s, %s, %s, %s)", row)优化代码(可选)
用with语句管理连接和文件,避免资源泄漏:import MySQLdb import csv with MySQLdb.connect(host="127.0.0.1", user="root", password="", database="csm") as conn: with conn.cursor() as cursor: with open('teste2.csv', 'r') as f: csv_data = csv.reader(f) next(csv_data) for idx, row in enumerate(csv_data, start=2): if len(row) != 8: print(f"第{idx}行数据异常,跳过:{row}") continue cursor.execute( "INSERT INTO estoque1 (release, official, `order`, date, product, client, sales, quant) VALUES (%s, %s, %s, %s, %s, %s, %s, %s)", row) conn.commit()
内容的提问来源于stack exchange,提问作者LeoBertass
相关产品推荐
相关产品推荐

