Pandas DataFrame转SQL表报错TypeError: schema参数重复赋值求助
解决Pandas to_sql在Databricks中报TypeError: init() got multiple values for argument 'schema'的问题
问题原因
报错源于Pandas 1.3.4与SQLAlchemy 2.0.0的兼容性冲突:
- Pandas 1.3.4发布时SQLAlchemy 2.0尚未推出,其
to_sql方法的参数逻辑与SQLAlchemy 2.0的接口不匹配。 - Databricks环境中底层数据库连接会自动传递
schema参数,而旧版Pandas的to_sql调用SQLAlchemy 2.0接口时,会触发参数重复传递的错误;本地运行正常是因为你的本地环境使用的是SQLAlchemy 1.x版本。
解决方案
以下三种方案任选其一:
1. 降级SQLAlchemy到1.x兼容版本
将SQLAlchemy降级到Pandas 1.3.4支持的1.x稳定版(推荐1.4.49,为1.x系列最后一个稳定版本):
pip install sqlalchemy==1.4.49
2. 显式指定schema参数为None
在to_sql调用中手动添加schema=None,避免参数重复传递:
purchase_df.to_sql('purchase_df', con=engine, if_exists='replace', index=False, schema=None)
3. 升级Pandas到支持SQLAlchemy 2.0的版本
Pandas从1.5.0版本开始正式支持SQLAlchemy 2.0,若环境允许,升级Pandas:
pip install pandas>=1.5.0
验证
修改后重新运行to_sql代码,即可正常将DataFrame写入SQL表,之后就能通过engine.execute执行SQL查询。
内容的提问来源于stack exchange,提问作者Arpan Ghimire
相关产品推荐
相关产品推荐

