2017-07-27 63 views
1

我試圖寫入(我可以讀得很好)值到MSSQL實例。我的代碼類似於:用Python和pypyodbc MSSQL數據插入 - 參數必須在列表中,元組

import pypyodbc 
lst = ['val1', 'val2', 'val3'] 
connection = pypyodbc.connect(...) 
cursor = connection.cursor() 
cursor.executemany("INSERT INTO table (a, b, c)VALUES(?,?,?)", lst) 

這將返回:參數必須位於列表元組中。我讀過類似的帖子,其中建議嘗試lst = list(['val1,'val2',val3']) 但是,這返回:列表()最多隻需要1個參數(3給出) 我也試過變種cursor.execute(),但同樣的問題。

回答

2

cursor.execute之間的差:

.execute (operation [, parameters ])

參數可以被提供爲序列或映射和將被綁定到在操作變量。

cursor.executemany

.executemany (operation , seq_of_parameters)

準備一個數據庫操作(查詢或命令),然後執行它靠在序列 seq_of_parameters中找到的所有參數序列或映射。

所以,如果你正在執行的查詢只一個組值,這樣稱呼它:

values = ['val1', 'val2', 'val3'] 
cursor.executemany("INSERT INTO table (a, b, c) VALUES (?,?,?)", [values]) 

或者,對於多套值:

values1 = ['val1', 'val2', 'val3'] 
values2 = ['val3', 'val2', 'val1'] 
cursor.executemany("INSERT INTO table (a, b, c) VALUES (?,?,?)", [values1, values2]) 
+0

謝謝,但不幸的是,現在它返回:('HY000','SQL包含3個參數標記,但提供了1個參數') –

+0

您確定您運行的是您提供的相同代碼嗎?因爲只有3個參數佔位符。 – randomir

相關問題