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

使用YAML参数在Python中连接SQL Server数据库失败求助

SQL Server连接失败(ODBC驱动未找到)排查与修复

问题场景

通过Python脚本读取YAML配置(包含hostname、database_name等参数)构建连接字符串,调用pyodbc.connect()时抛出错误:

InterfaceError: ('IM002', '[IM002] [Microsoft][ODBC Driver Manager] Data source name not found and no default driver specified (0) (SQLDriverConnect)')
但命令提示符中可正常连接SQL Server。

核心原因

Python脚本的连接字符串未指定正确的ODBC驱动版本/名称,或驱动与Python进程位数不匹配;而命令提示符中使用的连接工具(如sqlcmd)默认加载了正确驱动,因此可以正常连接。

排查步骤

  • 确认本地已安装的SQL Server ODBC驱动:
    打开ODBC数据源管理器(32位执行odbcad32.exe,64位执行C:\Windows\System32\odbcad32.exe),在「驱动程序」标签中找到类似ODBC Driver 17 for SQL Server的条目,记录完整驱动名称。
  • 匹配Python进程与驱动位数:
    64位Python必须搭配64位驱动,32位Python必须搭配32位驱动,位数不匹配会直接触发该错误。
  • 检查YAML配置与连接字符串模板:
    确认连接字符串中是否遗漏了Driver=参数,或驱动名称拼写错误。

修复示例

  1. 修改test.yaml,补充驱动参数:
hostname: your_server_host
database_name: target_db
driver: "ODBC Driver 17 for SQL Server"
  1. 在extract.py中完善连接字符串构建逻辑:
import yaml
import pyodbc

# 读取YAML配置
with open('test.yaml', 'r', encoding='utf-8') as f:
    config = yaml.safe_load(f)

# 构建带驱动的连接字符串(注意驱动名称用大括号包裹,避免特殊字符解析问题)
conn_str = (
    f"DRIVER={{{config['driver']}}};SERVER={config['hostname']};"
    f"DATABASE={config['database_name']};Trusted_Connection=yes;"
)

# 若使用SQL Server身份验证,替换为:
# conn_str = (
#     f"DRIVER={{{config['driver']}}};SERVER={config['hostname']};"
#     f"DATABASE={config['database_name']};UID={config['username']};PWD={config['password']};"
# )

# 建立连接
conn = pyodbc.connect(conn_str)

额外注意事项

  • 驱动名称必须与ODBC管理器中显示的完全一致,版本号(如17、13)不可写错。
  • 若使用Windows身份验证,确保运行Python脚本的用户拥有SQL Server访问权限。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.17 14:52:04