使用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
相关产品推荐
相关产品推荐

