You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

sqlalchemy-access to_sql追加数据报Table already exists错误

版本测试记录
  • 跨版本测试结果:在安装sqlalchemy-access 1.1.2版本的设备上运行写入脚本可正常执行;将原报错设备的sqlalchemy-access从1.1.3版本降级为1.1.2版本时,首次触发如下报错:
NoSuchModuleError: Can't load plugin: sqlalchemy.dialects:access.pyodbc
  • 测试变量控制:两台设备操作的是同一份存储在网络驱动器上的Access目标表。
问题场景

使用pandas DataFrame向已存在的MS Access表追加写入数据,核心实现代码如下:

cnn_str = r'Driver={Microsoft Access Driver (*.mdb, *.accdb)};DBQ=C:\data\MyData.accdb;'
cnn_url = f"access+pyodbc:///?odbc_connect={urllib.parse.quote_plus(cnn_str)}"
acc_engine = create_engine(cnn_url)
all_results_df.to_sql('results', acc_engine, if_exists='append')

代码执行过程中抛出错误:

ProgrammingError: ('42S01', "[42S01] [Microsoft][ODBC Microsoft Access Driver] Table 'results' already exists. (-1303) (SQLExecDirectW)")

已在to_sql方法中指定if_exists='append'参数,程序未执行追加逻辑反而触发表已存在报错。

原因与解决方案

该问题由sqlalchemy-access 1.1.3版本的已知bug导致:

  • 1.1.3版本中to_sql方法的表存在性校验逻辑失效,指定if_exists='append'时无法正确识别已存在的目标表,错误执行建表语句,最终触发ODBC驱动返回的表已存在错误。
  • 降级到1.1.2版本时出现的NoSuchModuleError是插件注册缓存未刷新导致,按以下步骤操作即可修复:
    • 完全卸载当前Python环境中所有已安装的sqlalchemy-access版本,清除残留安装文件
    • 重新安装1.1.2版本,安装完成后重启IDE/Python运行环境,让SQLAlchemy重新扫描加载已注册的数据库方言插件
  • 额外注意:操作存储在网络驱动器上的Access文件时,需保证运行脚本的系统账户对文件所在目录拥有读写、创建临时文件的权限,权限不足也可能偶发表存在性校验异常。

内容的提问来源于stack exchange,提问作者Nitzan

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.28 05:48:42