通过Python将CSV转换为SQL:传递多个参数

时间:2016-11-18 19:10:42

标签: python mysql sql csv typeerror

我是一个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))

如果有人能够解释我做错了什么,那真的很感激!

2 个答案:

答案 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]) ] )