SQLAlchemy v2.0报错:'OptionEngine'对象无'execute'属性求解决
解决SQLAlchemy 2.0+中pd.read_sql_query报'OptionEngine'无'execute'属性的问题
SQLAlchemy 2.0.0及后续版本对执行API做了重大变更,当执行pd.read_sql_query(query, engine_cloud)时会触发错误:
AttributeError: 'OptionEngine' object has no attribute 'execute'
以下是不依赖旧版本组件的解决方案:
方案一:使用连接上下文管理器传递连接对象
SQLAlchemy 2.0要求通过连接实例执行查询,而非直接调用引擎的execute方法。用上下文管理器可自动管理连接生命周期:
with engine_cloud.connect() as conn: s_settings_df = pd.read_sql_query(query, conn)
方案二:手动管理连接(需注意关闭)
如果需要更灵活的连接控制,可手动获取和关闭连接:
conn = engine_cloud.connect() s_settings_df = pd.read_sql_query(query, conn) conn.close()
方案三:ORM场景下使用Session连接
如果项目中使用SQLAlchemy ORM的Session,可通过Session获取连接传入pandas:
from sqlalchemy.orm import Session with Session(engine_cloud) as session: s_settings_df = pd.read_sql_query(query, session.connection())
原因说明
SQLAlchemy 2.0重构了引擎执行逻辑,OptionEngine作为Engine的包装类不再暴露execute方法。旧版pandas的read_sql_query默认依赖引擎的execute接口,直接传入引擎会报错;传递连接对象则完全符合SQLAlchemy 2.0的API规范。
内容的提问来源于stack exchange,提问作者NAJ
相关产品推荐
相关产品推荐

