パラメータ化された 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 サイトの他の関連記事を参照してください。