SQLAlchemy 式の背後にある生のコンパイル済み SQL を明らかにする
SQLAlchemy クエリ オブジェクトを操作する場合、実際の SQLAlchemy クエリ オブジェクトを取得することが望ましい場合があります。 、コンパイルされた SQL ステートメントを使用して、基礎となるデータベース操作についての洞察を得ることができます。ただし、パラメータが完全にバインドされたこの生のクエリを取得するのは困難であることが判明する可能性があります。
1 つのアプローチは、クエリ ステートメントをコンパイルするときに、compile_kwargs 内の literal_binds 引数を利用することです。以下に示すように:
print(q.statement.compile(compile_kwargs={"literal_binds": True}))
このメソッドは、パラメーターが直接挿入されたコンパイル済み SQL クエリを出力し、%s などのプレースホルダーの必要性を効果的に排除します。ただし、この手法は整数や文字列などの単純な型に限定されることに注意することが重要です。事前定義された値のないbindparam() が使用された場合、その値は出力に含まれません。
ドキュメントでは、信頼できない入力に対してこのアプローチを使用する場合は注意することが強調されています。 Python 値を SQL 文字列に強制する SQLAlchemy のメカニズムには、信頼できない入力に対するセキュリティが欠けているため、ユーザーが指定したデータに対してこの手法を使用しないことをお勧めします。代わりに、非 DDL SQL ステートメントをプログラムで呼び出すためにバインドされたパラメーターを使用することを強く推奨しています。
以上がSQLAlchemy クエリから生のコンパイル済み SQL を明らかにするにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。