MySQLDB カーソルによって構築された SQL 文字列を表示するにはどうすればよいですか?
-
27-10-2019 - |
質問
この MySQL 文字列がカーソルによってどのように変換されるかを自分で確認してみたいと思います。
cursor.execute("SELECT * from elements where id = %s", (element_id))
計算された SQL 文字列を取得して、できれば実行前に出力する方法はありますか?(後者は絶対に必要というわけではありません。私は Python を学習していて、SQL 文字列がサニタイズされていることを確認したいため、これを行っているだけです)
解決
はい。.Ferdinandが指摘しているように、そこには MySQLdb/cursors.py
を含む execute()
, 、これは順番に呼び出します _query()
.
これにより、実行されたクエリが次のようになります self._executed
.
だからあなたはそれを得ることができます cursor._executed
.
他のヒント
MySQL-Python は特別なことは何もせず、SQL インジェクションを防ぐために各引数をエンコードし、標準の Python を使用するだけです。 %
を置き換えるオペレータ %s
エンコードされた引数を含むプレースホルダー。
本当に結果を確認したい場合は、次と同じコードを実行してください。 cursor.execute()
行います:
from MySQLdb.converters import get_codec
def prepare_sql(cursor, query, args=None):
if args is not None:
query = query % tuple(( get_codec(a, cursor.encoders)(db, a) for a in args ))
return query
の定義を参照してください。 execute()
168行目から MySQLdb/cursors.py
.
所属していません StackOverflow