SQLAlchemyで実行されるクエリをprint出力する方法を記述します。
DB接続用ファイル(必要な方はどうぞ)
setting.py
import os
import sqlalchemy
from sqlalchemy import create_engine
from sqlalchemy.orm import scoped_session, sessionmaker
from sqlalchemy.ext.declarative import declarative_base
from dotenv import load_dotenv
load_dotenv()
# mysqlのDBの設定
db_user = os.getenv('DB_USERNAME')
db_pass = os.getenv('DB_PASSWORD')
db_port = 3306
db_hostname = os.getenv('IP_ADDRESS')
db_name = os.getenv('DB_NAME')
print('DB_USERNAME:{}, IP_ADDRESS:{},DB_NAME:{}'.format(
db_user, db_hostname, db_name
))
ENGINE = create_engine(
sqlalchemy.engine.url.URL(
drivername="mysql+pymysql",
username=db_user,
password=db_pass,
host=db_hostname,
port=db_port,
database=db_name,
# query=query_string
),
)
# Sessionの作成
session = scoped_session(
# ORM実行時の設定。自動コミットするか、自動反映するなど。
sessionmaker(autocommit=False,
autoflush=False,
bind=ENGINE)
)
print('sesssion')
# modelで使用する
Base = declarative_base()
Base.query = session.query_property()
main.py
from .setting import session # <-DB接続用のセッションを読み込んでます(不要であれば削除して構いません)
from sqlalchemy.dialects import mysql
def main():
query = session.query(SomethingTable)
print(query.statement.compile(
dialect=mysql.dialect(),
compile_kwargs={"literal_binds": True}))
実行結果
SELECT something.id, something.name
FROM something
参考ページ
SQLAlchemyが生成するクエリを確認する