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

使用to_sql的method='multi'参数写入MS Access触发AttributeError

报错触发原因
  • 根本原因是Microsoft Access的Jet/ACE SQL引擎不支持method='multi'对应的多行批量插入语法。pandas的method='multi'参数会生成INSERT INTO 表名 (字段名) VALUES (值组1),(值组2)...的单条多值插入SQL,该语法仅支持MySQL、PostgreSQL等主流数据库,Access原生不支持。
  • 底层异常链路:SQLAlchemy作为pandas to_sql的底层依赖,尝试为Access方言编译上述不兼容的SQL语句时会抛出CompileError编译异常,后续的异常处理逻辑尝试访问该异常对象不存在的orig属性,最终触发你看到的AttributeError。
可行解决方案
  • 方案1:直接移除method='multi'参数。你已经验证该写法可以正常运行,此时pandas会默认生成单行插入语句执行,完全适配Access的语法要求,数据量较小时优先选择该方案。
  • 方案2:使用pyodbc的executemany方法优化插入性能。如果数据量较大,逐行插入效率太低,可手动实现参数化批量插入,示例代码如下:
import pyodbc
import pandas as pd

# 替换为你实际的表字段列表
cols = ",".join([f"[{col}]" for col in test_data.columns])
placeholders = ",".join(["?"] * len(test_data.columns))
insert_sql = f"INSERT INTO employee_table ({cols}) VALUES ({placeholders})"

# 转换DataFrame为参数元组列表
params = list(test_data.itertuples(index=False, name=None))

# 执行批量插入
cursor = cnxn.cursor()
cursor.executemany(insert_sql, params)
cnxn.commit()
cursor.close()
  • 方案3:超大数据量场景下,可先将pandas数据导出为CSV/Excel格式,再使用Access自带的外部数据导入功能批量入库,性能远高于程序逐行插入。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.01 04:24:03