pyodbc无法连接DSN:驱动与应用架构不匹配问题求助
解决pyodbc连接DSN时的架构不匹配错误(IM014)
这个错误的核心原因很明确:你的Python运行环境(32位/64位)和你配置的ODBC DSN所使用的驱动架构不匹配。哪怕你在ODBC管理器里测试连接成功,那是因为测试用的是对应架构的管理器,但Python环境和驱动架构不一致时,就会触发这个IM014错误。
一步步排查和解决:
先确认你的Python是32位还是64位
打开Python终端,运行这段代码:import sys print(sys.maxsize > 2**32) # 输出True就是64位,False是32位确认DSN使用的驱动架构
注意Windows系统有两个ODBC数据源管理器,对应不同架构:- 64位管理器:
C:\Windows\System32\odbcad32.exe - 32位管理器:
C:\Windows\SysWOW64\odbcad32.exe
打开和你Python架构对应的管理器,找到你的FootNetDSN,查看它关联的数据库驱动是32位还是64位——如果这里的驱动架构和Python不一致,就是问题所在。
- 64位管理器:
调整架构匹配
有两种方式解决:- 方式一:更换Python版本,安装和驱动架构一致的Python(比如驱动是32位,就装32位Python)
- 方式二:重新配置DSN,在对应架构的ODBC管理器里,使用和Python架构匹配的数据库驱动来创建新的DSN
给你的代码提个小建议:
尽量不要用无差别的except:捕获所有异常,改成捕获具体的pyodbc.Error,这样能避免误捕获其他无关异常,也能更清晰地看到错误信息:
import pyodbc import time def connectToDB(): connection = None while connection is None: try: connection = pyodbc.connect(r'DSN=FootNet;UID=root;PWD=password') print("[DB connector] Connected successfully!") except pyodbc.Error as e: print(f"[DB connector] Error connecting to database: {e}. Trying again in 1 sec.") time.sleep(1) return connection
内容的提问来源于stack exchange,提问作者francosy
相关产品推荐
相关产品推荐

