4
4

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

SQLAlchemy クエリ確認方法

Last updated at Posted at 2021-01-27

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が生成するクエリを確認する

4
4
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
4
4

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?