Ubuntu 20.10下使用pyodbc连接Microsoft SQL Server Express登录超时问题
问题根因
从你补充的日志可以看出,你的SQL Server实例监听的是动态端口49677,不是默认的1433端口,ODBC驱动默认按1433端口发起连接,所以触发登录超时。你用SSMS可以正常登录,是因为SSMS会自动调用SQL Server Browser服务获取实例的动态端口,不需要手动指定,而ODBC驱动默认不会做这个查询,所以必须显式指定端口。
解决步骤
- 第一步修改Python代码里的server参数,在IP地址后加英文逗号和端口号49677,同时可以在连接串里增加连接超时参数避免短时间超时:
修改后的代码示例:
import pyodbc server = 'xxx.xxx.xxx.xxx,49677' # Windows虚拟机IP+英文逗号+监听端口 database = 'TestDB' username = 'TestUser' password = 'test123' cnxn = pyodbc.connect('DRIVER={ODBC Driver 17 for SQL Server};SERVER='+server+';DATABASE='+database+';UID='+username+';PWD='+ password+';Connect Timeout=30') cursor = cnxn.cursor()
- 第二步验证网络连通性:在Ubuntu虚拟机终端执行
nc -zv 你的Windows虚拟机IP 49677,如果返回连接成功说明网络和端口通,要是不通先排查:- 两台虚拟机的VMware网络模式是否一致(都为NAT或都为桥接,保证在同一网段),先确认Ubuntu能ping通Windows的IP
- 关闭Windows虚拟机的防火墙,或者添加入站规则放行49677端口
- 额外验证:打开SQL Server配置管理器,找到对应实例的TCP/IP配置,确认TCP/IP已启用,IPAll配置项里的动态端口确实为49677。
内容的提问来源于stack exchange,提问作者JabbaThePadd
相关产品推荐
相关产品推荐

