'Engine' object has no attribute 'execute'の対処法|SQLAlchemy
/ 2 min read
Updated:Table of Contents
問題
SQLAlchemy と pandas を使っていつものように read_sql したところ、エラーが出てしまいました。
AttributeError: 'OptionEngine' object has no attribute 'execute'create_engine() にオプションを渡していない場合は、次のように Engine のまま出ます。
AttributeError: 'Engine' object has no attribute 'execute'いずれも原因は同じで、SQLAlchemy 2.0 で Engine.execute() が削除されたことによるものです。pandas が read_sql の内部で con.execute() を呼ぶため、con に Engine をそのまま渡しているとこのエラーになります。
解決方法
con に Engine ではなく Connection を渡し、SQLを text() でラップすれば解消します。
import pandas as pdfrom sqlalchemy import create_enginefrom 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
