Pyodbc用localhost连SQL Server超时,127.0.0.1正常,求解决方案
解决Pyodbc用localhost连接SQL Server失败的问题
可能原因及对应解决方法
1. localhost解析到IPv6导致连接失败
你的hosts文件中::1也映射了localhost,使用localhost连接时,ODBC驱动可能优先尝试IPv6地址,但SQL Server大概率未开启IPv6监听。
解决步骤:
- 打开SQL Server配置管理器,找到SQL Server网络配置 -> 对应实例的协议
- 确认TCP/IP已启用,双击打开其属性
- 切换到IP地址标签,找到
IP6项,将已启用设为是,并保证TCP端口与IPv4配置一致(默认1433) - 若无需IPv6,也可注释hosts文件中
::1 localhost这一行(行首加#),让localhost仅解析到127.0.0.1
2. 指定SQL Server实例名或端口
如果你的SQL Server是命名实例(非默认实例),直接用localhost无法定位实例,需补充实例名或端口:
# 指定命名实例(示例实例名为SQLEXPRESS) cnxn_str = ( "Driver={ODBC Driver 17 for SQL Server};" "Server=localhost\\SQLEXPRESS;" "Database=**;" "UID=**;" "PWD=**;" ) # 或直接指定端口(默认1433) cnxn_str = ( "Driver={ODBC Driver 17 for SQL Server};" "Server=localhost,1433;" "Database=**;" "UID=**;" "PWD=**;" )
3. 验证SQL Server监听状态
打开命令提示符,执行以下命令检查端口监听:
netstat -ano | findstr :1433
若未看到0.0.0.0:1433或[::]:1433的记录,说明SQL Server未在对应地址监听,需回到配置管理器启用TCP/IP并重启SQL Server服务。
4. 强制使用TCP协议连接
在连接字符串中添加tcp:前缀,强制驱动使用TCP协议,避免尝试命名管道等其他连接方式:
cnxn_str = ( "Driver={ODBC Driver 17 for SQL Server};" "Server=tcp:localhost,1433;" "Database=**;" "UID=**;" "PWD=**;" )
内容的提问来源于stack exchange,提问作者Zac
相关产品推荐
相关产品推荐

