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

如何将大型Pandas DataFrame写入.accdb?遇IM002驱动错误求解决

解决Pandas写入MS Access数据库的IM002驱动错误

以下是针对你遇到的驱动未找到错误的排查和解决步骤:

1. 强制匹配Python与Access驱动的位数

这是最常见的触发原因:64位Python必须搭配64位Access ODBC驱动,32位Python搭配32位驱动,二者不能交叉混用。

  • 检查Python位数:运行以下代码确认
    import sys
    print(sys.maxsize > 2**32)  # 输出True为64位,False为32位
    
  • 对应位数打开ODBC数据源管理器:
    • 64位:打开C:\Windows\System32\odbcad32.exe
    • 32位:打开C:\Windows\SysWOW64\odbcad32.exe
  • 在「驱动程序」标签下确认存在Microsoft Access Driver (*.mdb, *.accdb),且位数与Python完全一致。如果缺失,安装对应位数的Access Runtime或Office驱动包。

2. 严格匹配驱动名称

不同版本的Office/Access驱动名称可能存在细微差异,必须完全照搬ODBC管理器中显示的精确名称:

  • 比如旧版驱动名称可能是{Microsoft Access Driver (*.mdb)},新版为{Microsoft Access Driver (*.mdb, *.accdb)},复制管理器中的全称替换到连接字符串里。

3. 绕过SQLAlchemy,直接测试pyodbc连接

先排除SQLAlchemy的配置干扰,用纯pyodbc代码测试基础连接:

import pyodbc
# 替换为你确认的驱动名称和数据库路径
conn_str = r'DRIVER={Microsoft Access Driver (*.mdb, *.accdb)};DBQ=C:\Users\Public\test\TEST.accdb;ExtendedAnsiSQL=1'
try:
    conn = pyodbc.connect(conn_str)
    cursor = conn.cursor()
    cursor.execute("SELECT 1")
    print("连接成功:", cursor.fetchone())
    conn.close()
except Exception as e:
    print("连接失败:", str(e))

如果这段代码失败,说明问题出在pyodbc与驱动的适配,而非Pandas或SQLAlchemy。

4. 调整SQLAlchemy引擎的创建方式

尝试改用更直接的连接字符串格式创建引擎:

import pandas as pd
from sqlalchemy import create_engine

accdb_path = r"C:\Users\Public\test\TEST.accdb"
connection_string = ( 
    "DRIVER={Microsoft Access Driver (*.mdb, *.accdb)};"
    f"DBQ={accdb_path};"
    "ExtendedAnsiSQL=1;"
)

# 改用这种方式创建引擎
engine = create_engine(f"access+pyodbc:///?odbc_connect={connection_string}")

df = pd.DataFrame([(1, "foo"), (2, "bar")], columns=["id", "txt"])
df.to_sql("my_table", engine, index=False, if_exists="append")

或者跳过access+pyodbc前缀,直接用pyodbc的URL格式:

from sqlalchemy.engine import URL
connection_url = URL.create(
    "pyodbc",
    query={"odbc_connect": connection_string}
)
engine = create_engine(connection_url)

5. 验证文件权限与路径

  • 确保数据库文件所在文件夹对当前用户有读写权限,可尝试将数据库移到桌面等权限开放的目录测试
  • 若路径包含空格或特殊字符,用双引号包裹路径(比如DBQ="C:\Users\Public\test\TEST.accdb")

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.04 06:41:19