_mysql_exceptions.OperationalError: (1366, "Incorrect integer value: '%s' for column 'ID' at row 1")

_mysql_exceptions.OperationalError: (1366, "Incorrect integer value: '%s' for column 'ID' at row 1")

我正在尝试使用 python 脚本将我的数据从 .csv 插入到 Mysql 数据库。

python 我使用的脚本

import csv
import MySQLdb

db = MySQLdb.connect(host='localhost',user='root',passwd='password',db='EfficientBazzar')
cursor = db.cursor()

csv_data = csv.reader(file('products.csv'))
for row in csv_data:
    cursor.execute('INSERT INTO vendor_price_list(ID,Vendor,productname,productcode,unit,weight,price)' 'VALUES("%s","%s","%s","%s","%s","%s","%s")')

db.commit()
cursor.close()
print "Done"

您忘记将行数据插入更新查询。

替换:

'VALUES("%s","%s","%s","%s","%s","%s","%s")'

与:

'VALUES("%s","%s","%s","%s","%s","%s","%s")' % tuple(row)

实际上更好,考虑参数化查询:

cursor.execute('INSERT INTO vendor_price_list(ID,Vendor,productname,productcode,unit,weight,price)' + \
               ' VALUES(%s,%s,%s,%s,%s,%s,%s)', row)

使用 MySQL 的 LOAD DATA INFILE 直接来自 csv 的批量命令甚至更快(假设服务器实例设置允许):

cursor.execute("LOAD DATA INFILE '/path/to/products.csv'" + \
               " INTO TABLE vendor_price_list" + \
               " FIELDS TERMINATED BY ',' ENCLOSED BY '\"'" + \
               " LINES TERMINATED BY '\n' IGNORE 1 ROWS")