2

SQLite3 で使用するために、Python でサニタイズされたクエリ文字列を作成しようとしています。究極の形をとる必要があります。

SELECT * FROM Players WHERE PlayerName LIKE '%bob%'

...パターン検索を実行できます。

理想的には、 ? これにより、クエリの実行時に検索文字列を挿入して、Bobby Tablesタイプのイベントが発生しないようにすることができます (そのことについて心配する必要はありません)。

search_string = "bob"

query = "SELECT * FROM Players WHERE PlayerName LIKE '%?%'"

cur.execute(query, (search_string))

これを実行すると、次のようになります。

sqlite3.ProgrammingError: 提供されたバインディングの数が正しくありません。現在のステートメントは 0 を使用しており、3 つ指定されています。

したがって、問題は単一引用符、パーセント、および疑問符の使用の両方にあると確信していますが、かなり行き詰まっています-pythonがバインディングが必要であることを認識できるようにクエリを作成できません。

これを回避する最善の方法は何ですか、またはSQLでパターン検索用のサニタイズされたクエリを作成するためのより良い方法はありますか?

更新:最終行は:

cur.execute(query, [('%' + search_string + '%')])
4

2 に答える 2

0
query = "SELECT * FROM Players WHERE PlayerName LIKE '%' + ? + '%'"

変数 (?) を区切るだけです。

于 2013-01-07T15:55:01.810 に答える
0

唯一のプレースホルダー?を後に使用し、パラメーターの割り当て中にLIKEラップsearch_stringします。%

...
search_string = 'bob'
query = 'SELECT * FROM Players WHERE PlayerName LIKE ?'
cur.execute(query, ('%' + search_string + '%'))
于 2013-01-07T16:32:55.563 に答える