2017-03-29 16 views
3

私はpythonの初心者で、リストのINを使用してすべての行(idsがリストで提供されます)の1つの列値を更新しようとしています。boolとリストでフォーマット文字列の引数が不足しています

私のクエリは、このようなものです:

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)) 

は、だから私は、問題が最初のパラメータ値であると思いますが、私はこれを解決する方法を知りません。

何か助けていただければ幸いです。あなたは別のパラメータとしてlstIdsの値のそれぞれを含む必要

+0

いーえ。 –

+0

@WillemVanOnsem:値を補間するのではなく、クエリパラメータのみを補間します。 –

+0

@MartijnPieters:私は知っていますが、まだそれを行うにはエレガントな方法ではありません。 –

答えて

3

:それはリストである場合lstIdsを想定

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

タプル、又は

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

あります。

それとも、Pythonの3.5およびそれ以降で*表記して1つのリストに列を組み合わせることができます。そのようqueryesフォーマットしないでください....

cursor.execute(qry, [col1Value, *lstIds]) 
関連する問題