ホームページ > データベース > mysql チュートリアル > Python の MySQL でプリペアド ステートメントを使用してクエリのパフォーマンスを向上させ、SQL インジェクションを防ぐにはどうすればよいですか?

Python の MySQL でプリペアド ステートメントを使用してクエリのパフォーマンスを向上させ、SQL インジェクションを防ぐにはどうすればよいですか?

Barbara Streisand
リリース: 2024-12-11 13:32:10
オリジナル
720 人が閲覧しました

How Can I Use Prepared Statements with MySQL in Python to Improve Query Performance and Prevent SQL Injection?

Python の MySQL でプリペアド ステートメントを使用する

データベース操作を使用する場合、プリペアド ステートメントを使用するとクエリのパフォーマンスが大幅に向上します。 Python では、プリペアド ステートメントを MySQL で利用できます。

Python のパラメータ化されたクエリ形式

Python では、次の形式を使用してパラメータ化されたクエリを作成できます。

cursor.execute("SELECT FROM tablename WHERE fieldname = %s", [value])
ログイン後にコピー

パラメータ マーカー %s は、実際の値のプレースホルダーとして機能します。データベースドライバーが異なれば、使用するパラメーター化スタイルも異なる場合があります。ドライバーに適切なスタイルを決定するには、ドライバー モジュールをインポートし、その paramstyle 属性を出力します。

サポートされるパラメーター化スタイル

Python 拡張提案 (PEP- 249) では、次のパラメータ化スタイルがサポートされています:

  • 'qmark':疑問符スタイル (例: ...WHERE name=?)
  • 'numeric': 数値、位置スタイル (例: ...WHERE name=:1)
  • 'named':名前付きスタイル (例: ...WHERE name=:name)
  • 'format': ANSI C printf 形式コード(例: ...WHERE name=%s)
  • 'pyformat': Python 拡張形式コード (例: ...WHERE name=%(name)s)

使用例

準備されたステートメントの使用法を示すには、次のことを考慮してください。例:

import mysql.connector

db = mysql.connector.connect(
    host="localhost",
    user="username",
    password="password",
    database="database_name"
)

cursor = db.cursor()

# Create a parameterized query
parameterized_query = "SELECT * FROM users WHERE name = %s"

# Execute the query with the provided parameter
cursor.execute(parameterized_query, ("John Doe",))

# Fetch the results
results = cursor.fetchall()

# Close the cursor and connection
cursor.close()
db.close()
ログイン後にコピー

パラメータ化されたクエリを使用すると、データベースが事前にクエリ プランを準備できるため、コードが SQL インジェクション攻撃から保護され、クエリのパフォーマンスが向上します。

以上がPython の MySQL でプリペアド ステートメントを使用してクエリのパフォーマンスを向上させ、SQL インジェクションを防ぐにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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