Stack OverflowやSQLiteクエリに変数を挿入するための正しい構文を探している他のオンラインリサーチを検索しています。しかし、サポートされている3つの構文のどれも、私の質問には役に立たなかった。SQLite DB-API構文のPython 3.5の問題
私はSQLiteのDB-APIのための3つのサポート構文があることがわかった。
:私は次のことを実行したときしかし、私はこれらのエラーを受け取るに http://www.philvarner.com/test/ng-python3-db-api/から取ら
qmark:
curs.execute("SELECT * FROM actors where actor.first_name = ?",("D'Angelo",))
numeric:
curs.execute("SELECT * FROM actors where actor.first_name = :1", ("D'Angelo",))
named:
curs.execute("SELECT * FROM actors where actor.first_name = :first_name",{'first_name': "D'Angelo"})
named: tableListQuery = "SELECT name FROM :dbFile WHERE type='table' ORDER BY Name", {'dbFile': dbFile} userCursor.execute(tableListQuery) Pycharm error: Expected type 'str', got 'Tuple[str, Dict[str, Any]]' Terminal error: File "./dedupeDatabase.py", line 15, in Describe userCursor.execute(tableListQuery) ValueError: operation parameter must be str ------------------------------------------------- qmark: tableListQuery = "SELECT name FROM ? WHERE type='table' ORDER BY Name", (dbFile,) userCursor.execute(tableListQuery) Pycharm error: Expected type 'str', got 'Tuple[str, Tuple[Any]]' instead Terminal error: File "./dedupeDatabase.py", line 15, in Describe userCursor.execute(tableListQuery) ValueError: operation parameter must be str ------------------------------------------------- numeric: tableListQuery = "SELECT name FROM :1 WHERE type='table' ORDER BY Name", (dbFile,) userCursor.execute(tableListQuery) Pycharm error: Expected type 'str', got 'Tuple[str, Tuple[Any]]' Terminal error: File "./dedupeDatabase.py", line 15, in Describe userCursor.execute(tableListQuery) ValueError: operation parameter must be str
この問題に関するご意見をお聞かせください。
クエリのテーブル名をパラメータ化することはできません。 [ここ](http://stackoverflow.com/questions/1274432/sqlite-parameters-not-allowing-tablename-as-parameter)を参照してください。この値を自分自身で(外部ソースから来たものであれば)サニタイズしてから、 '.format()'を使ってクエリ文字列に入れてください。 – roganjosh
これは本当ですが、OPの問題の原因ではありません遭遇する;これは単純にPythonの構文上の問題です。ここでは、タプルを定義し、クエリ文字列とパラメータを別々に渡すのではなく、 'execute'メソッドに渡します。 –
Pythonでこれらの値を「サニチズ」する方法のサンプルコードを提供してください。私はあなたが何を意味するかを100%確信していません –