我是一名python初学者,我试图解析一个CSV文件并将其内容添加到数据库中。通过Python将CSV转化为SQL:传递多个参数
我当前的代码:
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))
如果有人能说明什么我做错了,这将会是非常赞赏!
尝试在列表的末尾添加一个逗号。更多,请尝试与元组而不是列表的列表:) – 2016-11-18 19:20:16
我的方式了解它,通过离开?我可以稍后在.execute()调用中传递参数,而当我尝试%s时(不成功),我还尝试按照您所说的传递参数。我只是试着按照你的建议添加.format,然后调整其余部分,但是我得到了一个ProgrammingError,并被告知要阅读我附近的语法(?,?,?,?)。 – Nicholas
@ Dex'ter感谢您的回复。我认为这是你的意思? vals =(row [0],row [1],row [2],row [3])的数据类型为“sql =”插入水果(ID,NAME,COLOR,SIZE)VALUES(?,?,?,?) ]) cursor.execute(sql,vals)' – Nicholas