ホームページ > データベース > mysql チュートリアル > ワイルドカードを使用した SQL LIKE クエリの Python 文字列を正しくフォーマットするにはどうすればよいですか?

ワイルドカードを使用した SQL LIKE クエリの Python 文字列を正しくフォーマットするにはどうすればよいですか?

Barbara Streisand
リリース: 2024-12-19 21:32:13
オリジナル
492 人が閲覧しました

How Can I Correctly Format Python Strings for SQL LIKE Queries with Wildcards?

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 サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート