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

使用Python连接SQL Server时出现KeyError: 'SQL Server'错误求助

解决pyodbc连接时的KeyError: 'SQL Server'问题

我来帮你搞定这个问题,你遇到的KeyError: 'SQL Server'其实是踩了两个容易忽略的小坑:


第一个坑:意外把连接字符串变成了元组

你在第二个代码块里,给r"SERVER={};".format(abc)后面加了个逗号,这直接让conn_str变成了字符串元组,但pyodbc.connect()只认单个字符串的连接参数,这就给后续解析埋下了隐患。

第二个坑:原始字符串和格式化语法冲突

你用了r前缀的原始字符串,但里面的{SQL Server}里的大括号,会被format()当成格式化占位符,它会试图去找一个叫SQL Server的键来替换,这就是KeyError的直接原因。


修正后的可运行代码

这里给你两种可行的修正方案,选哪种都可以:

方案1:用format格式化(兼容Python3.5及以下)

import pyodbc

abc = "db.analytics.com"
conn_str = (
    'DRIVER={{SQL Server}};'
    'SERVER={};'
    'DATABASE=Reporting;'
    'UID=user;'
    'PWD=password;'
).format(abc)

cnxn = pyodbc.connect(conn_str)
curs = cnxn.cursor()

方案2:用f-string(Python3.6+更简洁)

import pyodbc

abc = "db.analytics.com"
# 用f-string写法更直观,注意转义大括号
conn_str = f'''
DRIVER={{SQL Server}};
SERVER={abc};
DATABASE=Reporting;
UID=user;
PWD=password;
'''
# 去掉换行符避免格式问题
conn_str = conn_str.replace('\n', '')

cnxn = pyodbc.connect(conn_str)
curs = cnxn.cursor()

关键修正点说明

  • 用{{}}代替{}:这样格式化工具就会把它当成普通的大括号保留,给ODBC驱动识别用
  • 删掉多余的逗号:确保conn_str是一个完整的字符串,而不是元组
  • 如果用多行字符串,记得清理掉换行符,避免连接字符串格式出错

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.14 08:36:32