You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用PYODBC和DSN连接Azure SQL Database时遇IM002错误求助

问题描述

我在Python项目中通过SQLAlchemy连接Azure SQL Database,使用DSN方式创建引擎:

connection_string = 'mssql+pyodbc://user:pwd@dsn'
engine = sqlalchemy.create_engine(connection_string)

执行查询时触发错误:

InterfaceError: (pyodbc.InterfaceError) ('IM002', '[IM002] [Microsoft][ODBC Driver Manager] Data source name not found and no default driver specified (0) (SQLDriverConnect)')

异常点说明:

  • 仅staging(stg)环境出现该错误,dev和prod(prd)环境正常运行
  • 排除密码特殊字符问题:其他环境密码类型一致但无报错
  • stg的DSN参数与其他环境完全匹配,且已被其他软件成功使用
  • 通过sqlalchemy.URL.create()直接指定主机/数据库等参数可正常连接stg,但项目强制要求使用DSN方式
可能的原因及排查步骤

1. DSN的32位/64位兼容性问题

  • 运行Python项目的进程位数与stg的DSN配置位数不匹配:如果Python是32位,而stg的DSN配置的是64位(或反之),ODBC驱动管理器会找不到DSN。
  • 验证方式:打开对应位数的ODBC数据源管理器(32位路径为C:\Windows\SysWOW64\odbcad32.exe,64位为C:\Windows\System32\odbcad32.exe),确认stg的DSN是否在对应管理器中存在。

2. 系统用户权限差异

  • 运行Python项目的用户无读取stg DSN配置的权限:dev/prd环境的运行用户和stg环境的用户权限不同,导致无法加载DSN配置。
  • 验证方式:切换到其他环境的运行用户(或管理员权限用户)运行项目,查看是否能连接;检查DSN对应的注册表项权限(配置存储在HKEY_CURRENT_USER\Software\ODBC\ODBC.INI或HKEY_LOCAL_MACHINE\Software\ODBC\ODBC.INI),确保运行用户有读取权限。

3. DSN名称的大小写或拼写问题

  • 存在大小写敏感或拼写误差:部分系统下ODBC驱动管理器对DSN名称大小写敏感,代码中拼写的DSN名称和实际配置不匹配。
  • 验证方式:直接复制ODBC管理器中stg的DSN名称替换代码中的dsn部分,避免手动输入错误。

4. ODBC驱动版本不一致

  • stg环境的ODBC驱动版本与dev/prd不同:比如dev/prd使用ODBC Driver 17 for SQL Server,而stg安装的是旧版本驱动,导致DSN配置无法被正确识别。
  • 验证方式:在ODBC数据源管理器的「驱动」标签页查看各环境的驱动版本,确保stg环境安装了与其他环境一致的驱动版本。

5. 环境变量或配置文件冲突

  • stg环境存在自定义ODBC配置文件:部分部署环境会通过ODBCINI环境变量指定自定义配置文件,导致代码读取的DSN与ODBC管理器中显示的不一致。
  • 验证方式:在stg环境终端执行echo %ODBCINI%(Windows)或echo $ODBCINI(Linux),查看是否存在自定义配置文件路径;检查该文件中是否包含stg的DSN配置。

内容的提问来源于stack exchange,提问作者James

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.26 20:15:05