ホームページ > データベース > mysql チュートリアル > Python の `cursor.execute()` 関数を使用して SQL クエリで変数を安全に使用するにはどうすればよいですか?

Python の `cursor.execute()` 関数を使用して SQL クエリで変数を安全に使用するにはどうすればよいですか?

Linda Hamilton
リリース: 2025-01-12 08:20:43
オリジナル
150 人が閲覧しました

How Can I Safely Use Variables in SQL Queries with Python's `cursor.execute()` Function?

パラメータ化された SQL クエリに Python で変数を使用する

Python では、SQL インジェクションを防ぐためにパラメータ化された SQL クエリが重要です。推奨されるアプローチは変数を実行関数に直接渡すことですが、場合によっては変数を使用してクエリ自体を表すことも望ましい場合があります。

変数としてクエリ: 構文エラー

SQL クエリを変数から直接実行しようとすると (以下に示すように)、構文エラーが発生します:

<code>sql = "INSERT INTO table VALUES (%s, %s, %s)", var1, var2, var3
cursor.execute(sql)</code>
ログイン後にコピー

関数の実行

cursor.execute関数のシグネチャでは、最大 3 つのパラメーターを受け入れることが指定されています:

<code>cursor.execute(self, query, args=None)</code>
ログイン後にコピー

したがって、クエリとパラメータを含む変数を単一のパラメータとして渡すのは正しくありません。

解決策

この問題を解決するには、2 つの解決策が考えられます:

パラメータで展開されたタプル:

<code>sql_and_params = "INSERT INTO table VALUES (%s, %s, %s)", var1, var2, var3
cursor.execute(*sql_and_params)</code>
ログイン後にコピー

ただし、タプルに 3 つ以上の要素がある場合、このアプローチではエラーが発生する可能性があります。

個別のクエリとパラメータ:

また、クエリとパラメータを分離することもできます:

<code>sql = "INSERT INTO table VALUES (%s, %s, %s)"
args = var1, var2, var3
cursor.execute(sql, args)</code>
ログイン後にコピー

このメソッドはより冗長ですが、正しい数のパラメータが実行関数に渡されることが保証されます。

以上がPython の `cursor.execute()` 関数を使用して SQL クエリで変数を安全に使用するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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