pyodbc在Python3.7.2正常运行,Python3.11.3报数据源未找到错误
问题原因及解决方案
报错原因
- Python与Access驱动位数不匹配:Python 3.11默认是64位版本,而你之前使用的Python 3.7大概率是32位,对应搭配的也是32位Access驱动。64位Python无法调用32位驱动,直接导致找不到驱动的报错。
- 驱动未安装或版本不兼容:pyodbc 4.0.39对驱动的兼容性要求更严格,若Python 3.11所在系统未安装对应版本的64位Access驱动,就会触发该错误。
- 驱动名称不匹配:新版Office的Access驱动名称可能存在细微调整,旧连接字符串里的驱动名可能不再适配当前系统中的驱动。
解决步骤
1. 确认Python位数
打开Python终端,执行以下代码:
import sys print(sys.maxsize > 2**32) # 返回True为64位,False为32位
2. 安装对应位数的Access驱动
- 若为64位Python:下载64位的Microsoft Access Database Engine。如果系统已安装32位Office,直接安装会冲突,需用静默安装方式:下载
AccessDatabaseEngine_X64.exe后,打开命令提示符执行:AccessDatabaseEngine_X64.exe /quiet - 若为32位Python:直接安装32位的Microsoft Access Database Engine即可。
3. 修正连接字符串
先打开对应位数的ODBC数据源管理器,确认驱动名称:
- 64位系统:打开
C:\Windows\System32\odbcad32.exe,查看「驱动」选项卡中的Access驱动名称 - 32位系统:打开
C:\Windows\SysWOW64\odbcad32.exe,查看对应驱动名称
将查到的驱动名称替换到代码中,同时改用f-string格式化字符串(更清晰不易出错):
import pyodbc my_db_path = r'C:\testing\mydb.accdb' my_db_pw = r'djw85nawj12' # 替换为你从ODBC管理器中查到的驱动名称 driver = '{Microsoft Access Driver (*.mdb, *.accdb)}' conn = pyodbc.connect(f'DRIVER={driver};DBQ={my_db_path};PWD={my_db_pw}')
内容的提问来源于stack exchange,提问作者R-obert
相关产品推荐
相关产品推荐

