flask-sqlalchemyで生成されるsql文を文字列として取得する方法

次のsql文を実行するときに生成されるsql文を文字列として取得したい

db.session.query(User).all()

開発環境
python
flask
flask-alchemy

db.session.query(User).all()とQuery(User).with_session(db.session)は同じ結果を返すので後者に置き換える。

両者の違い

db.session.query(User).all() は、SQLAlchemyのセッションオブジェクトである db.session を使用。
Query(User).with_session(db.session) は、SQLAlchemyのクエリオブジェクトを使用して、データベースから User モデルのすべてのレコードを取得するために使用される。これは、セッションオブジェクトをクエリに渡すことで実行される。

from sqlalchemy.dialects import mysql
from sqlalchemy.orm import Query

query = Query(User).with_session(db.session)
# SQLAlchemyのdialectsモジュールを使用して、MySQLのdialectを取得し、SQLAlchemyのcompile()メソッドを使用して、SQL文をコンパイル
statement = query.statement.compile(dialect=mysql.dialect())
sql = str(statement)
return sql
タイトルとURLをコピーしました