skip to content
barorin&?

SQLAlchemy2.0以降を使ってread_sqlする方法

/ 1 min read

問題

SQLAlchemy と pandas を使っていつものように read_sql したところ、
read_sql_query() throws "'OptionEngine' object has no attribute 'execute'"
というエラーが出てしまいました。

解決方法

どうやら、SQLAlchemy の ver2.0 から若干仕様が変わったようで、以下のようにしたら無事エラーが解消しました。

import pandas as pd
from sqlalchemy import create_engine
from sqlalchemy import text as q_text

def connection_db():
    """DB接続"""
    SQLALCHEMY_DATABASE_URL = "sqlite:///hoge.db"
    engine = create_engine(
        SQLALCHEMY_DATABASE_URL, connect_args={"check_same_thread": False}
    )
    return engine

engine = connection_db()

# ポイント
# SQLはSQLAlchemyのtext関数を通す
# engineにconnect()メソッドをつける
q = q_text("SELECT * FROM huga_table")
df = pd.read_sql(sql=q, con=engine.connect())

参考

read_sql_query() throws “‘OptionEngine’ object has no attribute ‘execute’” with SQLAlchemy 2.0.0