Python导出DataFrame至PostgreSQL时出现AttributeError错误求助
Python导出DataFrame至PostgreSQL时出现AttributeError错误求助
你好呀!看到你在把清理好的DataFrame导出到PostgreSQL时碰到了AttributeError: 'Engine' object has no attribute 'cursor'这个错误,我之前也踩过类似的坑,给你几个排查和解决的方向:
先检查依赖库的版本与安装情况
这个错误大概率和pandas、SQLAlchemy、psycopg2这几个库的兼容性或者安装问题有关:
- 确保psycopg2驱动正确安装:你的连接字符串用的是
postgresql+psycopg2,所以必须要有psycopg2相关的包。如果之前装的是psycopg2(需要编译环境)容易出问题,建议换成预编译的psycopg2-binary试试:pip install --upgrade psycopg2-binary - 升级pandas和SQLAlchemy到兼容的稳定版本:如果你的pandas版本偏旧,而SQLAlchemy用了2.0以上的新版本,就容易出现这类API不兼容的问题。直接升级到最新稳定版就行:
pip install --upgrade pandas sqlalchemy
调整代码的连接传入方式
如果升级后还是有问题,可以试试把SQLAlchemy的连接对象传给to_sql,而不是直接传Engine对象。修改你的代码最后几行:
engine = marcommdb_connection() output_table = 'sf_enreg' # 改成用连接对象来执行 with engine.connect() as conn: final_enreg_tbl.to_sql(output_table, conn, index=False, if_exists='replace')
with语句会自动帮你管理连接的打开和关闭,比直接用Engine更稳妥。
额外小检查
最后可以确认下你的final_enreg_tbl确实是pandas的DataFrame对象,偶尔会因为清理数据时的操作(比如转成了其他类型)导致问题,加一行打印验证下:
print(type(final_enreg_tbl)) # 正常应该输出 <class 'pandas.core.frame.DataFrame'>
试试这些方法,应该能解决你的问题~
备注:内容来源于stack exchange,提问作者Hippiepina
相关产品推荐
相关产品推荐

