使用pyodbc连接本地SQL Server失败,求原因及解决办法
问题原因分析
从输出的连接字符串和报错信息能定位到核心问题:
- SERVER与DATABASE字段为空:连接字符串里
SERVER=;DATABASE=,说明代码中的SERVER_NAME和DATABASE_NAME变量未被正确赋值,这是连接失败的首要原因。 - 无效连接属性与加密冲突:报错提到"Invalid connection string attribute",且连接字符串多了未在代码中定义的
Encrypt=yes;——ODBC Driver 17 for SQL Server默认启用加密,而本地SQL Server通常未配置SSL证书,会导致连接超时或验证失败。 - 超时设置不合理:
Connection Timeout=0代表无限等待连接,易引发连接流程异常阻塞。
解决方法
1. 正确赋值服务器与数据库变量
将SERVER_NAME和DATABASE_NAME替换为实际值:
- 本地默认SQL Server实例通常为
localhost或.\SQLEXPRESS(Express版本) - 数据库名填写你通过VS Code SQL扩展成功连接的目标库名
示例代码:
DRIVER_NAME = "ODBC Driver 17 for SQL Server" SERVER_NAME = "localhost" # 或你的实例名,比如".\SQLEXPRESS" DATABASE_NAME = "YourTargetDB" # 替换为实际数据库名
2. 修正连接字符串参数
- 显式设置
Encrypt=no,规避本地连接的SSL证书验证问题 - 将
Connection Timeout改为合理值(如30秒),避免无限等待
修改后的连接字符串:
conn_str = ( f'DRIVER={{{DRIVER_NAME}}};' f'SERVER={SERVER_NAME};' f'DATABASE={DATABASE_NAME};' f'Trusted_Connection=yes;' f'Connection Timeout=30;' f'Encrypt=no;' )
3. 验证变量赋值有效性
在构建连接字符串前添加打印语句,确认变量值正确:
print("SERVER_NAME:", SERVER_NAME) print("DATABASE_NAME:", DATABASE_NAME)
确保输出为实际的服务器和数据库名称,而非空值。
4. 确认SQL Server服务状态
检查本地SQL Server服务是否正常运行:
- 按下
Win+R,输入services.msc打开服务管理器 - 找到
SQL Server (你的实例名),确认状态为“正在运行”
内容的提问来源于stack exchange,提问作者KRob
相关产品推荐
相关产品推荐

