ホームページ >データベース >mysql チュートリアル >Python の変数に格納されたパラメータ化された SQL クエリを実行できますか?
Python の変数からパラメータ化された SQL クエリを実行します
SQL インジェクションを防ぐために、Python でパラメーター化された SQL クエリを実行するときは、通常、次の形式を使用することをお勧めします:
<code class="language-python">cursor.execute("INSERT INTO table VALUES (%s, %s, %s)", var1, var2, var3)</code>
ただし、クエリを変数に保存して後で実行できるかどうかについては検討する価値があります。
execute()
メソッド署名
これが機能しない理由を理解するには、execute()
メソッドの署名を確認する必要があります。
<code class="language-python">cursor.execute(self, query, args=None)</code>
このメソッドには、クエリとオプションのパラメータ シーケンスまたはマップという最大 3 つのパラメータが必要です。
変数からクエリを実行してみます
変数 sql
に格納されているクエリを実行しようとすると、たとえば次のようになります。
<code class="language-python">sql = "INSERT INTO table VALUES (%s, %s, %s)" cursor.execute(sql)</code>
には変数自体を含む 4 つのパラメーターが含まれているため、エラーが発生します。 sql
クエリとパラメータを分離する
変数からクエリを実行するには、クエリとパラメータを分離します。
<code class="language-python">sql = "INSERT INTO table VALUES (%s, %s, %s)" args = var1, var2, var3 cursor.execute(sql, args)</code>この場合、
にはクエリが含まれ、sql
にはパラメータが含まれます。 args
を指定すると、パラメーター化されたクエリを正常に実行できます。 execute(sql, args)
別の方法
あるいは、より直観的な 2 変数アプローチを使用することもできます。
<code class="language-python">sql = "INSERT INTO table VALUES (%s, %s, %s)" cursor.execute(sql, (var1, var2, var3))</code>このアプローチにより、クエリとパラメータに個別の変数を作成する必要がなくなります。
以上がPython の変数に格納されたパラメータ化された SQL クエリを実行できますか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。