Python导入CSV至MySQL时触发Incorrect Integer Value错误求助
解决CSV导入数据库时的"Incorrect Integer Value"问题
我一眼就看出问题出在你的SQL语句写法上啦!你现在的代码里,把row[0]和row[1]用双引号括起来了,这就导致数据库接收到的不是你想要的整数值,而是字面量字符串"row[0]"和"row[1]"。而你的a、b字段是整数类型,数据库没法把这些字符串转换成有效的整数,所以就抛出了"Incorrect Integer Value"警告,并且插入了默认的0值。
正确的写法有两种,首推参数化查询(安全又省心):
参数化查询是处理数据库插入的最佳实践,它能自动处理类型转换,还能防止SQL注入攻击:
csv_data = csv.reader(open('ppi.csv')) for row in csv_data: # 用%s作为占位符,参数放在元组里传给execute cursor.execute('INSERT INTO ADKnowledgeBase.PPI(a,b) VALUES(%s, %s);', (row[0], row[1]))
如果你一定要用字符串拼接(不推荐,有注入风险):
可以把整数转成字符串直接拼进SQL语句里,注意不要加引号:
csv_data = csv.reader(open('ppi.csv')) for row in csv_data: # 使用f-string拼接变量 cursor.execute(f'INSERT INTO ADKnowledgeBase.PPI(a,b) VALUES({row[0]}, {row[1]});')
或者用str.format()方法:
csv_data = csv.reader(open('ppi.csv')) for row in csv_data: cursor.execute('INSERT INTO ADKnowledgeBase.PPI(a,b) VALUES({}, {});'.format(row[0], row[1]))
另外补充一点:你原来的file('ppi.csv')写法在Python 3里已经被废弃了,建议改用open('ppi.csv')哦。
内容的提问来源于stack exchange,提问作者SemicolonExpected
相关产品推荐
相关产品推荐

