ホームページ >バックエンド開発 >Python チュートリアル >SQLAlchemy で実際の SQL クエリを表示するにはどうすればよいですか?

SQLAlchemy で実際の SQL クエリを表示するにはどうすればよいですか?

Mary-Kate Olsen
Mary-Kate Olsenオリジナル
2024-10-18 13:20:03961ブラウズ

How to Display Actual SQL Queries in SQLAlchemy?

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 サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。