2017-11-04 7 views
0

2つのSQLiteクエリを結合する方法を理解しようとしています。両方とも独立して動作しますが、ANDと一緒に使用すると機能しません。問題は、変数を適切に渡す方法がわからないということです。Pythonを使用したSQLiteでの変数置換

var1 = 10 
mylist = ['A', 'B', 'C', 'AB', 'AC'] 
c.execute("SELECT * FROM my_table WHERE column1=(?) ORDER BY RANDOM() LIMIT 1", (mylist[2],)) 

をこの行でも動作します:

params = [5,0,1] 
query = ("SELECT * FROM my_table WHERE column2 NOT IN (%s)" % ','.join('?' * len(params))) 
c.execute(query, params) 

私は成功せず、これらの二つの文を結合しようとしている:

query = ("SELECT * FROM my_table WHERE column2 NOT IN (%s) AND column1=(?)" % ','.join('?' * len(params))) 
c.execute(query, params, mylist[2]) 

誰もこれが参考に見つけた場合は動作します 最初のクエリ最終的な解決策は次のようになりました:

query = ("SELECT * FROM my_table WHERE column1 = (?) AND column2 NOT IN (%s) ORDER BY RANDOM() LIMIT 1" % ','.join('?' * len(params))) 
    c.execute(query, [mylist[2]] + params) 

答えて

2

​​の2番目のパラメータは、すべてのSQLパラメータを含むシーケンスでなければなりません。

c.execute(query, params + [list[2]]) 
+0

ありがとう:

は、だから、両方の元のリストからの値を持つ単一のリストを構築する必要があります。完璧に働いた。私は以前のコメントを削除しました。なぜなら、私のクエリをどのようにフォーマットしていたのかということでした。上記の質問を調整して、正しくフォーマットされるようにします。 – tjohnson

関連する問題