ネコと和解せよ

技術的なあれこれの備忘録のつもり

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}))

参考

stackoverflow.com