[解決済み] SQLAlchemy の式から、コンパイルされた生の SQL クエリを得るにはどうしたらいいですか?
2022-05-06 16:41:04
質問
SQLAlchemy のクエリオブジェクトを持っていて、コンパイルされた SQL 文のテキストを、すべてのパラメータを束ねた状態で取得したいのです(たとえば、no.
%s
またはステートメントコンパイラや MySQLdb 方言エンジンなどによってバインドされるのを待っているその他の変数)。
呼び出し
str()
をクエリで実行すると、次のようなことがわかります。
SELECT id WHERE date_added <= %s AND date_added >= %s ORDER BY count DESC
query._paramsの中を見てみましたが、空のdictになっています。 を使って自作のコンパイラを書きました。
この例の
sqlalchemy.ext.compiler.compiles
デコレーター
が、そこのステートメントでもまだ
%s
のように、データが欲しいところ。
クエリオブジェクトを調べると、常に空の辞書になっています(クエリは正常に実行され、エコーロギングをオンにするとエンジンはそれを出力しますが)。
SQLAlchemy は、基礎となるクエリを私に知られたくないのだ、なぜなら、式 API のインターフェイスの一般性を、すべての異なる DB-API で壊すからだ、というメッセージを私は受け取り始めています。 私は、クエリが何であるかを知る前に実行されたとしても気にしません。
どのように解決するのですか?
これは のブログで、最新の回答が掲載されています。
ブログの記事から引用すると、これが提案され、私の場合はうまくいきました。
>>> from sqlalchemy.dialects import postgresql
>>> print str(q.statement.compile(dialect=postgresql.dialect()))
ここで、qは次のように定義される。
>>> q = DBSession.query(model.Name).distinct(model.Name.value) \
.order_by(model.Name.value)
または任意の種類の
session.query()
.
Nicolas Cadouさん、回答ありがとうございました。ここで検索してくる他の人の役に立てれば幸いです。
関連
-
Python Decorator 練習問題
-
[解決済み] SQL ServerでSELECTからUPDATEする方法とは?
-
[解決済み] Pythonで現在時刻を取得する方法
-
[解決済み] 列の値に基づいてDataFrameから行を選択するにはどうすればよいですか?
-
[解決済み] PHPでSQLインジェクションを防ぐにはどうしたらいいですか?
-
[解決済み] リストの最後の要素を取得する方法
-
[解決済み] MySQLでコマンドラインを使用してSQLファイルをインポートするにはどうすればよいですか?
-
[解決済み] SQL Server で複数行のテキストを 1 つのテキスト文字列に連結する方法
-
[解決済み] SQL Server の DateTime データ型から日付だけを返す方法
-
[解決済み】2つの辞書を1つの式でマージする(辞書の和をとる)には?)
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
Pythonの非常に便利な2つのデコレーターを解説
-
PythonによるLeNetネットワークモデルの学習と予測
-
ピロウズ画像色処理の具体的な活用方法
-
pythonを使ったオフィス自動化コード例
-
Python百行で韓服サークルの画像クロールを実現する
-
Python 可視化 big_screen ライブラリ サンプル 詳細
-
Python入門 openを使ったファイルの読み書きの方法
-
Python Pillow Image.save jpg画像圧縮問題
-
[解決済み] [Solved] sklearn error ValueError: 入力に NaN、infinity または dtype('float64') に対して大きすぎる値が含まれている。
-
[解決済み】終了コード -1073741515 (0xC0000135)でプロセス終了)