SQLAlchemyで生成するクエリをパラメータ付きで取得する
生成するSQLをパラメータ付きで確認したいと思って調べたら中々たどり着けなかったので備忘録として残す
前提のモデル
以下のようなidとnameのカラムを持つようなUserモデルを考える
from sqlalchemy.ext.declarative import declarative_base class User(Base): __tablename__ = 'users' id = Column('id', Integer, primary_key = True) name = Column('name', String(20))
また、セッションが必要なので予めsessionmaker
などで作っておく。以降ではsession
という変数で用いることにする
クエリを取得する
例えばnameカラムが ABC
のものを探す場合を考えると、SQLAlchemyでは以下のように書くと思う
sql = session.query(User).filter(User.name == 'ABC')
このクエリの文字列を取得するには以下のようにcompileして取り出す
from sqlalchemy.dialects import postgresql sql = str(sql.statement.compile(dialect=postgresql.dialect(), compile_kwargs={"literal_binds": True}))
上記はPostgreSQLの例で、それ以外のDBを使っている場合は postgresql
部分を以下のように mysql
などに置き換えれば動くと思う
from sqlalchemy.dialects import mysql sql = str(sql.statement.compile(dialect=mysql.dialect(), compile_kwargs={"literal_binds": True}))