升级至O365后pyodbc连接MS Access报IM002错误求助
将MS Access 2010桌面版升级至O365后,原有Python连接Access的代码触发错误:
pyodbc.InterfaceError: ('IM002', '[IM002] [Microsoft][ODBC Driver Manager] Data source name not found and no default driver specified (0) (SQLDriverConnect)')
使用的代码:
conn = pyodbc.connect( r'Driver={Microsoft Access Driver (*.mdb, *.accdb)};' r'DBQ=C:\Data\Analytics\Database\VA VULN Cleanup.accdb;')
已完成排查:卸载重装32/64位驱动、确认驱动名称无拼写错误、参考过同类问题的解决方案,但问题仍未解决。
严格匹配Python与驱动的位数
这是核心排查点:若Python为32位,必须搭配32位Access ODBC驱动;Python为64位则用64位驱动。可在Python中执行import sys; print(sys.maxsize)判断位数——输出小于2147483647为32位,大于则为64位。
注意O365默认可能安装64位Access组件,若使用32位Python,需手动安装对应版本的32位Access Runtime,安装时明确选择“32位版本”。更新驱动名称为O365适配版
部分O365环境下,驱动名称会扩展为{Microsoft Access Driver (*.mdb, *.accdb, *.accde, *.accdr)},尝试修改连接字符串:conn = pyodbc.connect( r'Driver={Microsoft Access Driver (*.mdb, *.accdb, *.accde, *.accdr)};' r'DBQ=C:\Data\Analytics\Database\VA VULN Cleanup.accdb;')也可直接查看系统中已安装的驱动名称:
- 32位驱动:打开
C:\Windows\SysWOW64\odbcad32.exe,在“驱动程序”标签页复制准确名称 - 64位驱动:打开
C:\Windows\System32\odbcad32.exe,查看对应驱动名称
- 32位驱动:打开
解决O365 Click-to-Run与驱动的冲突
O365的Click-to-Run版本可能和独立ODBC驱动冲突,可按以下步骤处理:- 卸载当前安装的Access ODBC驱动
- 下载对应位数的“Microsoft Access Database Engine 2016 Redistributable”
- 若安装时提示“无法安装64位版本,因已安装32位Office产品”,用命令行静默安装:
- 64位驱动:
AccessDatabaseEngine_X64.exe /quiet - 32位驱动:
AccessDatabaseEngine.exe /quiet
- 64位驱动:
验证数据库文件的访问权限
确保Python进程拥有读取目标数据库文件的权限,可先将文件复制到桌面等权限开放的路径,再测试连接是否正常。改用DSN连接方式
手动创建ODBC数据源(DSN)替代直接驱动连接:- 打开对应位数的
odbcad32.exe,进入“用户DSN”或“系统DSN”标签页 - 点击“添加”,选择对应Access驱动,设置数据源名称并指向目标数据库
- 修改Python代码为:
conn = pyodbc.connect('DSN=你的DSN名称;')
- 打开对应位数的
内容的提问来源于stack exchange,提问作者Starr

