我是一名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