如何在SQLAlchemy AsyncSession/AsyncEngine中使用df.to_sql()
解决用AsyncEngine执行pandas to_sql的报错问题
你遇到的AttributeError: 'Session' object has no attribute 'cursor',是因为df.to_sql需要的是数据库连接对象(DBAPI Connection)或者SQLAlchemy Engine,但你直接把Session传给它时,它会把Session当成连接来调用cursor方法,而Session本身没有这个属性,所以报错。
给你两种可行的解决方法:
方法一:通过Session获取连接执行
在run_sync里,利用同步Session拿到实际的数据库连接,传给df.to_sql的con参数:
await session.run_sync( lambda sync_session: df.to_sql( name="temp_data", con=sync_session.connection(), if_exists="replace", # 按需设置,比如append/replace/fail index=False # 按需决定是否写入索引 ) )
方法二:直接用AsyncEngine的run_sync方法
如果不需要Session的事务管理,直接用AsyncEngine的run_sync来执行同步的to_sql操作更简单:
await engine.run_sync( lambda sync_engine: df.to_sql( name="temp_data", con=sync_engine, if_exists="replace", index=False ) )
两种方法的核心都是给df.to_sql传入正确的con参数——要么是连接对象,要么是Engine,而不是Session本身。
内容的提问来源于stack exchange,提问作者lamhktommy
相关产品推荐
相关产品推荐

