SQLAlchemy: 真のクエリを明らかにする
SQLAlchemy を使用する場合、実行されている実際の SQL クエリを検査することが有益な場合があります。 SQLAlchemy は通常バインド パラメーターに依存しますが、実際の値を含む対応する SQL ステートメントを生成する方法があります。
一般的な解決策
ほとんどの場合、簡単に実行できます。 SQLAlchemy ステートメントまたはクエリの SQL 文字列表現を取得します:
<code class="python">import sqlalchemy as sa print(str(statement))</code>
これは、ORM クエリと select() またはその他のステートメントの両方で機能します。必要に応じて、ステートメントを特定の方言またはエンジンにコンパイルできます:
<code class="python">print(statement.compile(someengine))</code>
、またはエンジンを指定せずに:
<code class="python">from sqlalchemy.dialects import postgresql print(statement.compile(dialect=postgresql.dialect()))</code>
バインドされたパラメーターのインライン化
SQL 文字列にバインド パラメータの代わりに実際の値を含めるために、SQLAlchemy は、compile_kwargs:
<code class="python">from sqlalchemy import table, column, select t = table('t', column('x')) s = select([t]).where(t.c.x == 5) print(s.compile(compile_kwargs={"literal_binds": True}))</code>
の 'literal_binds' フラグを通じて限定的なサポートを提供します。ただし、このアプローチは基本的な型と事前に値が割り当てられていないバインド パラメータを処理できない場合があります。カスタム型の場合、process_literal_param メソッドを使用して TypeDecorator を実装できます。
<code class="python">class MyFancyType(TypeDecorator): def process_literal_param(self, value, dialect): return "my_fancy_formatting(%s)" % value</code>
これにより、特定の要件に基づいて値のレンダリングをカスタマイズできます。
以上がSQLAlchemy で真の SQL クエリを取得するには?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。