【发布时间】:2016-11-18 19:10:42
【问题描述】:
我是 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))
如果有人能解释我做错了什么,我将不胜感激!
【问题讨论】:
-
尝试在列表的末尾添加一个逗号。更多,尝试使用元组而不是列表列表:)
-
我理解它的方式,离开 ?我可以稍后在 .execute() 调用中传递参数,而当我尝试 %s (不成功)时,我也试图按照你所说的传递参数。我只是按照您的建议尝试添加 .format 并调整了其余部分,但我收到了 ProgrammingError 并被告知要在 (?, ?, ?, ?) 附近阅读我的语法。
-
@Dex'ter 感谢您的回复。我想这就是你的意思?
sql = "INSERT INTO fruit(ID,NAME,COLOUR,SIZE) VALUES(?, ?, ?, ?)" vals = (row[0], row[1], row[2], row[3]) cursor.execute(sql, vals) -
@Dex'ter 抱歉,缺少一半的评论...这不起作用:/
标签: python mysql sql csv typeerror