WHERE _ IN _ステートメントを適切に使用する方法を理解しようとしています
意味:
c.execute('''CREATE TABLE IF NOT EXISTS tab (
_id integer PRIMARY KEY AUTOINCREMENT,
obj text NOT NULL
) ;''')
私はこのようなことをしようとしています:
list_of_vars=['foo','bar']
statement="SELECT * FROM tab WHERE obj IN (?)"
c.execute(statement,"'"+"','".join(list_of_vars)+"'")
または、これも試しましたが、これは上記に直接評価されます
statement="SELECT * FROM tab WHERE obj IN (?)"
c.execute(statement,"'foo','bar'")
私が得ているエラーは次のとおりです。
sqlite3.ProgrammingError: Incorrect number of bindings supplied. The current statement uses 1, and there are 9 supplied
これは私にエラーを与えています。このようにするとうまくいきますが、SQL インジェクション攻撃に対して脆弱であるため、これはお勧めできません。
statement="SELECT * FROM tab WHERE obj IN ("+"'"+"','".join(statement)+"'"+")