2017-03-29 32 views
3

我是Python的新手,並試圖更新列表中的所有行(列表中提供ids提供)列值(真/假)列表上使用IN沒有足夠的參數爲格式字符串與布爾和列表

我的查詢是這樣的:

qry = "Update table Set "\ 
     "col1 = %s "\ 
     "where col2 in (" + ",".join("%s" for _ in lstIds) 
qry += ")" 
cursor.execute(qry,(col1Value, lstIds)) 

但我發現了錯誤

沒有足夠的論據格式字符串

我已經嘗試了不同的解決方案,但無法解決我的問題。 當我改變我查詢這種方式,it works fine

qry = "Update table Set "\ 
    "col1 = 1 "\ 
    "where col2 in (" + ",".join("%s" for _ in lstIds) 
qry += ")" 
cursor.execute(qry,(lstIds)) 

所以我猜問題是在第一個參數值,但我不知道如何解決這個問題。

任何形式的幫助將不勝感激。

+0

NOOO ....不要格式化queryes的方式。 –

+0

@WillemVanOnsem:它們不是插值,只是查詢參數。 –

+0

@MartijnPieters:我知道,但仍然不是一個很好的方法來做到這一點。 –

回答

3

您需要包括每個在lstIds值作爲一個單獨的參數:

cursor.execute(qry, (col1Value,) + lstIds) 

假設lstIds是一個元組,或

cursor.execute(qry, [col1Value] + lstIds) 

,如果它是一個列表。

或者你可以用*符號在Python 3.5序列組合成一個列表,更新:

cursor.execute(qry, [col1Value, *lstIds]) 
相關問題