使用ODBC Driver 17 for SQL Server连接Python与MS SQL Server遇超时问题求助
解决ODBC Driver 17 for SQL Server连接MS SQL Server超时问题
针对你遇到的pyodbc.OperationalError: ('HYT00', '[HYT00] [Microsoft][ODBC Driver 17 for SQL Server]Login timeout expired')错误,可按以下步骤排查解决:
1. 验证服务器可达性与实例名称
- 替换主机名为IP地址测试,比如将
Server=PROZONEVIC-01改为Server=192.168.x.x(替换为实际服务器IP),避免DNS解析问题。如果是命名实例,需加上实例名,格式为Server=PROZONEVIC-01\SQLEXPRESS。 - 在终端执行
ping PROZONEVIC-01测试网络连通性,若不通则排查防火墙、路由或服务器网络配置。 - 测试SQL Server默认端口(1433)的连通性:Linux下用
nc -zv PROZONEVIC-01 1433,Windows用telnet PROZONEVIC-01 1433,不通则检查SQL Server是否开启TCP/IP协议,以及防火墙是否放行1433端口。
2. 检查SQL Server基础配置
- 确认SQL Server服务处于运行状态,可通过SQL Server配置管理器查看。
- 在SQL Server配置管理器中,检查对应实例的TCP/IP协议已启用,且监听端口设置正确(默认1433)。
- 开启远程连接权限:在SSMS中右键服务器→属性→连接,勾选“允许远程连接到此服务器”。
3. 调整身份验证方式
你的pyodbc安装路径显示为Linux环境,Trusted_Connection=yes(Windows身份验证)在Linux下需要配置Kerberos,若未配置可改用SQL Server身份验证:
修改连接字符串为:
cnxn = pyodbc.connect(r'Driver=ODBC Driver 17 for SQL Server;Server=PROZONEVIC-01;Database=DescartesShips;UID=你的SQL用户名;PWD=你的SQL密码;')
注意需确保SQL Server已启用混合模式身份验证,且该用户拥有DescartesShips数据库的访问权限。
4. 检查驱动与pyodbc兼容性
- 执行
odbcinst -q -d查看已安装的ODBC驱动,确认输出包含ODBC Driver 17 for SQL Server,若缺失需重新安装驱动。 - 尝试降低pyodbc版本至4.0.35,部分新版本可能存在兼容性问题:
pip install pyodbc==4.0.35
5. 增加连接超时时间调试
在连接字符串中添加超时参数,排除临时网络延迟影响:
cnxn = pyodbc.connect(r'Driver=ODBC Driver 17 for SQL Server;Server=PROZONEVIC-01;Database=DescartesShips;Trusted_Connection=yes;Timeout=30;')
内容的提问来源于stack exchange,提问作者Victor Mori
相关产品推荐
相关产品推荐

