SQL ワイルドカードと LIKE を使用した Python の文字列フォーマット
ワイルドカードを使用した SQL ステートメントを Python コードに統合するときに問題が発生しましたか?この記事では、LIKE キーワードとワイルドカードを含むクエリの Python 文字列をフォーマットするときに直面する一般的な課題の解決策を提供します。
問題:
ワイルドカードを使用した LIKE キーワードの使用Python で MySQLdb を使用する SQL ステートメントには問題があることがわかります。 Python の format メソッドを使用して文字列をフォーマットしようとさまざまな試みを行うと、Python の値検証または MySQLdb のクエリ実行でエラーが発生します。
不正な試行:
# Attempt 1: Value error due to unsupported escape sequence "SELECT tag.userId, count(user.id) as totalRows FROM user INNER JOIN\ tag ON user.id = tag.userId WHERE user.username LIKE '%%s%'" % (query) # Attempt 2: Returns same error as Attempt 1 "SELECT tag.userId, count(user.id) as totalRows FROM user INNER JOIN\ tag ON user.id = tag.userId WHERE user.username LIKE '\%%s\%'" % (query) # Attempt 3: Error from MySQLdb due to insufficient arguments in format string like = "LIKE '%" + str(query) + "%'" totalq = "SELECT tag.userId, count(user.id) as totalRows FROM user INNER JOIN\ tag ON user.id = tag.userId WHERE user.username " + like # Attempt 4: Returns same error as Attempt 3 like = "LIKE '\%" + str(query) + "\%'" totalq = "SELECT tag.userId, count(user.id) as totalRows FROM user INNER JOIN\ tag ON user.id = tag.userId WHERE user.username " + like
解決策:
これらの書式設定に対処するには問題を解決し、SQL ステートメントが正しく実行されることを確認するには、次のアプローチを採用します。
curs.execute("""SELECT tag.userId, count(user.id) as totalRows FROM user INNER JOIN tag ON user.id = tag.userId WHERE user.username LIKE %s""", ('%' + query + '%',))
この例では、2 つの引数がexecute() メソッドに渡されます。最初の引数は、ワイルドカード式のプレースホルダーを含む、フォーマットされた SQL 文字列です。 2 番目の引数は、パーセント記号の接頭辞と接尾辞が付いたワイルドカード式を含むタプルです。これにより、ワイルドカードが検索文字列の両端に確実に適用されます。
この方法を利用すると、SQL インジェクション攻撃のリスクが排除され、フォーマット エラーなしでクエリが確実に実行されます。
以上がワイルドカードを使用した SQL LIKE クエリの Python 文字列を正しくフォーマットするにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。