SQLAlchemy で実際の SQL クエリを出力する
SQLAlchemy で SQL クエリを実行するには、SQL インジェクション攻撃を防ぐためにパラメータをバインドする必要があります。ただし、値を含む実際の SQL クエリを取得するのは困難な場合があります。
一般的な解決策
SQL クエリを文字列として取得する最も簡単な方法は、次の方法です。 str() 関数:
<code class="python">print(str(statement)) # for both ORM Query and SQL statements</code>
バインドされたパラメーターの実装
デフォルトでは、SQLAlchemy はセキュリティ上の理由からパラメーターをバインドします。この動作は、compile_kwargs の literal_binds フラグを使用して抑制できます。
<code class="python">from sqlalchemy.dialects import postgresql print( statement.compile(compile_kwargs={"literal_binds": True}) )</code>
リテラル バインディングは、整数や文字列などの基本型でのみサポートされていることに注意してください。
パラメータ変換のカスタマイズ
より複雑な型を変換する必要がある場合は、process_literal_param メソッドを使用してカスタム TypeDecorator を作成できます:
<code class="python">class MyFancyType(TypeDecorator): impl = Integer def process_literal_param(self, value, dialect): return "my_fancy_formatting(%s)" % value print( tab.select().where(tab.c.x > 5).compile( compile_kwargs={"literal_binds": True}) )</code>
これにより、次のようなクエリが生成されます:
<code class="sql">SELECT mytable.x FROM mytable WHERE mytable.x > my_fancy_formatting(5)</code>
以上がSQLAlchemy で実行された実際の SQL クエリを取得するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。