SQLAlchemy で実際の SQL クエリを出力する
SQLAlchemy では、データベース操作に対応する生の SQL を表示する方法を理解することが重要です。 。これは、アプリケーションのデータベース通信のトラブルシューティング、デバッグ、最適化に不可欠です。
一般的なアプローチ
ほとんどの場合、ステートメントの SQL 文字列表現を簡単に表示できます。または次のクエリを使用します。
<code class="python">print(str(statement))</code>
これは、ORM クエリと生の select() 式の両方に適用されます。
特定の方言へのコンパイル
If特定の方言またはエンジン用にコンパイルされた SQL を表示する必要がある場合は、compile() メソッドを使用できます:
<code class="python">print(statement.compile(someengine))</code>
、またはエンジンなし:
<code class="python">from sqlalchemy.dialects import postgresql print(statement.compile(dialect=postgresql.dialect()))</code>
インライン化バインドされたパラメータ
SQLAlchemy のデフォルトの動作では、SQL 文字列でバインド パラメータを使用し、SQL インジェクション攻撃を防止してセキュリティを確保します。バインドされたパラメーターをバイパスして実際の値をインライン化するには、compile_kwargs で literal_binds フラグを使用します:
<code class="python">print(s.compile(compile_kwargs={"literal_binds": True}))</code>
このアプローチでサポートされていないカスタム型の場合は、インライン レンダリングを保証するために process_literal_param メソッドを使用して TypeDecorator を実装します:
<code class="python">class MyFancyType(TypeDecorator): 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>
以上がSQLAlchemy で実際の SQL クエリを表示するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。