以下のように、PythonのSqliteライブラリでパラメーター化されたLIKEクエリを使用しようとしています。
self.cursor.execute("select string from stringtable where string like '%?%' and type = ?", (searchstr,type))
しかし ?ワイルドカードの内側は評価されておらず、次のエラーが発生します。
"sqlite3.ProgrammingError: Incorrect number of bindings supplied. The current statement uses 1, and there are 2 supplied."
タグ付きバージョンのクエリを使用することも試みました:
like '%:searchstr%'
および{"searchstr":searchstr...
を含むリスト
しかし、それを実行すると、クエリは実行されますが、手動で"like '%a%'"...
を入力しても、何百もの結果が返されても、結果は返されません
何か提案してください?
引用符はどちらかを保護します?
または:name
プレースホルダーとして解釈されないため-文字通りに解釈されます。渡す文字列をパーセント記号で囲み、引用符なしのプレーンプレースホルダーを使用する必要があります。つまり:
self.cursor.execute(
"select string from stringtable where string like ? and type = ?",
('%'+searchstr+'%', type))
?
は引用符で囲まれています。これは、プレースホルダーとして使用する場合とまったく同じです。