Python查询Access数据库时出现‘Data Source Name Not Found’错误求助
解决pyodbc连接Access时的IM002错误
嘿,我之前也遭遇过这个一模一样的ODBC驱动报错!结合你已经配置的32位环境(Access 2016 32位、Python2.7.13 32位、32位pyodbc),咱们来一步步排查解决:
先确认你的连接字符串是否正确
这个错误最常见的原因就是连接字符串里的驱动名称不匹配,或者DSN配置有问题。
情况1:你用的是DSN连接
如果你的代码是类似这样的:
conn = pyodbc.connect('DSN=YourAccessDSN;')
请务必检查:
- 32位ODBC数据源管理器里配置的DSN名称和代码里的完全一致(包括大小写,虽然Windows默认不区分,但最好严格匹配)
- 该DSN确实指向了你要连接的Access数据库文件,并且测试连接是成功的
情况2:改用无DSN的直接连接(更推荐)
有时候DSN配置容易出各种隐藏问题,直接用数据库文件路径的连接字符串会更可靠,示例代码如下:
import pyodbc # 替换成你的数据库文件实际路径 db_path = r'C:\Users\YourName\Documents\your_database.accdb' conn_str = ( r'DRIVER={Microsoft Access Driver (*.mdb, *.accdb)};' r'DBQ=' + db_path + ';' ) try: conn = pyodbc.connect(conn_str) print("连接成功!") # 后续操作... conn.close() except pyodbc.Error as e: print(f"错误信息:{e}")
注意这里的驱动名称{Microsoft Access Driver (*.mdb, *.accdb)}要和32位ODBC管理器里显示的驱动名称完全一致,如果你安装的是Access 2016,这个名称是正确的,但如果是其他版本可能略有不同,一定要核对。
再验证一次环境位数匹配
虽然你说已经用了32位组件,但可以再确认一下,避免不小心装错:
在Python交互环境里运行以下代码:
import sys # 输出False表示是32位Python,True是64位 print("Python是32位吗?", sys.maxsize <= 2**32) import pyodbc print("pyodbc版本:", pyodbc.version)
确保Python确实是32位,pyodbc也是对应32位版本(如果是用pip装的,32位Python会自动装32位pyodbc,但手动安装的话要注意)。
其他排查点
- 检查Access数据库文件是否被锁定:如果Access软件正在打开这个数据库,Python可能无法连接,先关闭Access再试
- 检查文件权限:确保Python脚本有读取该数据库文件的权限,不要把文件放在Program Files这类系统保护文件夹里
- 重启你的Python环境或者电脑:有时候ODBC驱动的配置需要重启才能生效
你收到的错误信息:
pyodbc.InterfaceError: ('IM002', u'[IM002] [Microsoft][ODBC Driver Manager] Data source name not found and no default driver specified (0) (SQLDriverConnect)')
内容的提问来源于stack exchange,提问作者JJMeadows3
相关产品推荐
相关产品推荐

