使用Python pyodbc连接Access 2016失败求助,现有方案不匹配环境
你的问题详情
运行代码:
connection_string = (r'DRIVER={Microsoft Access Driver (*.mdb, *.accdb)};DBQ=C:\Users\Bob-Admin\Documents\MyDatabase.accdb;') cnxn = pyodbc.connect(connection_string, autocommit=True) crsr = cnxn.cursor()错误提示:
('IM002', '[IM002] [Microsoft][ODBC Driver Manager] Data source name not found and no default driver specified (0) (SQLDriverConnect)')
环境参数:Windows 10、Office 2016 64位、Access 2016 64位、Python 3.7.3(64位/32位)、已安装Microsoft Access Driver (*.mdb, *.accdb)、pyodbc 4.0.27
针对你遇到的这个问题,结合你的环境参数,我整理了几个针对性的排查和解决思路:
严格核对驱动与Python的位数一致性:这是最容易踩的坑!哪怕你装了64位Office和Access,也要确保当前运行的Python位数和ODBC驱动的位数完全匹配。你可以通过两个ODBC管理器确认:
- 检查64位驱动:打开
C:\Windows\System32\odbcad32.exe,切换到「驱动」标签,查看是否有Microsoft Access Driver (*.mdb, *.accdb) - 检查32位驱动:打开
C:\Windows\SysWOW64\odbcad32.exe,同样查看驱动列表
64位Python必须搭配64位驱动,32位Python对应32位驱动——哪怕Office是64位,也可以单独安装32位的Access ODBC驱动。
- 检查64位驱动:打开
尝试使用具体版本的驱动名称:通用驱动名称偶尔会出现识别问题,你可以试试指定Access 2016对应的驱动全名,修改连接字符串如下:
connection_string = (r'DRIVER={Microsoft Access Driver 16.0 (*.mdb, *.accdb)};DBQ=C:\Users\Bob-Admin\Documents\MyDatabase.accdb;')验证数据库路径的有效性与权限:确保目标数据库文件确实存在于
C:\Users\Bob-Admin\Documents\MyDatabase.accdb,并且Python进程有读取该文件的权限。可以临时把数据库移到更简单的路径(比如C:\temp\MyDatabase.accdb),排除路径中的潜在问题。修复Office/Access的驱动安装:有时候Office的ODBC驱动可能安装不完整,你可以打开「控制面板」→「程序和功能」,找到Microsoft Office 2016,右键选择「更改」→「快速修复」,完成后重启电脑再测试连接。
确认pyodbc与Python的位数匹配:运行以下代码,验证当前Python和pyodbc的位数是否一致:
import pyodbc import struct print(f"Python 位数: {struct.calcsize('P') * 8}") print(f"pyodbc 版本: {pyodbc.version}")如果输出的Python位数和你要使用的驱动位数不符,切换对应位数的Python环境即可。
内容的提问来源于stack exchange,提问作者Justin

