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

SQLAlchemy で実行された実際の SQL クエリを取得するにはどうすればよいですか?

Mary-Kate Olsen
リリース: 2024-10-18 13:15:03
オリジナル
1094 人が閲覧しました

How to Obtain the Actual SQL Query Executed in SQLAlchemy?

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

ソース:php
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート