我是一个python初学者,我正在尝试解析CSV文件并将其内容添加到数据库中。
我目前的代码:
with open('fruit.csv', 'rb') as f:
reader = csv.reader(f, delimiter='\t', quoting=csv.QUOTE_NONE)
for row in reader:
sql = "INSERT INTO fruit(ID,NAME,COLOUR,SIZE) VALUES(?, ?, ?, ?)"
try:
cursor.execute(sql, [ row[0], row[1], row[2], row[3] ] )
db.commit()
print('done')
except csv.Error as e:
print('error: ' + e)
db.rollback()
我当前的错误:
Traceback (most recent call last):
File "mysqltest.py", line 23, in <module>
cursor.execute(sql, (row[0], row[1], row[2], row[3]))
File "C:\Python27\lib\site-packages\MySQLdb\cursors.py", line 187, in execute
query = query % tuple([db.literal(item) for item in args])
TypeError: not all arguments converted during string formatting
我在SE上阅读了很多其他问题的答案,但我仍然无法理解如何将一行中的多个值作为单独的值传递给SQL字符串。
不确定是否相关,但这是我试图写的表的结构:
TABLE FRUIT (
ID int primary key NOT NULL,
NAME CHAR(20) NOT NULL,
COLOUR CHAR(20),
SIZE CHAR(20))
如果有人能够解释我做错了什么,那真的很感激!
答案 0 :(得分:1)
在大多数Python API模块中,MySQL使用%s
运算符而非?
。
sql = "INSERT INTO fruit(ID, NAME, COLOUR, SIZE) VALUES(%s, %s, %s, %s)"
try:
cursor.execute(sql, [row[0], row[1], row[2], row[3]])
答案 1 :(得分:0)
我认为类型错误。 所以,你可以尝试下面的代码。
使用str()函数
cursor.execute(sql, [ str(row[0]), str(row[1]), str(row[2]), str(row[3]) ] )