Python读取CSV插入MySQL报错1054(未知字段Shahran)求助
错误原因
- CSV读取配置错误:你给
csv.reader设置的分隔符为\n,导致每行数据会被识别为单个完整字符串,不会按逗号拆分成对应各个字段的列表,最终传入SQL的是整行未拆分的字符串内容。 - SQL拼接逻辑错误:直接将字段值拼接到SQL语句中,字符串类型的值
Shahran没有被引号包裹,MySQL会将其识别为列名而非待插入的字段值,直接触发1054报错。同时这种字符串拼接SQL的写法存在SQL注入风险,属于不规范的数据库操作写法。
修复方案
修正后的代码如下:
import csv # 此处保留你原本初始化数据库连接、创建cursor的逻辑不变 with open('housePrice.csv','r', encoding='utf-8') as f: # 使用csv.reader默认的逗号分隔符,自动拆分每行的各个字段 data = csv.reader(f) for row in data: # 使用参数化查询,占位符用%s,字段列表作为execute的第二个参数传入 cursor.execute( 'insert into testineuron.houseprice values(%s, %s, %s, %s, %s, %s, %s, %s)', row ) mydb.commit()
如果你的表字段顺序和CSV列的顺序不一致,可以在插入语句中明确指定字段名,写法更稳妥:
insert into testineuron.houseprice(字段1名, 字段2名, 字段3名, ..., 字段8名) values(%s, %s, %s, %s, %s, %s, %s, %s)
参数化查询会由数据库驱动自动处理不同类型值的格式适配:字符串会自动加引号,数值、布尔值也会自动匹配对应字段的类型要求,从根源上避免本次报错以及SQL注入的安全问题。
内容的提问来源于stack exchange,提问作者Kunj Jani
相关产品推荐
相关产品推荐

