在Linux机器上使用pyodbc连接到SQL Server命名实例时,我一直在试图指出错误。连接到未使用命名实例的其他SQL Server时,我可以正常连接。以下示例适用于没有命名实例的服务器:
import pyodbc
DB_WMS_NJ62 = 'DRIVER={ODBC Driver 13 for SQL Server};SERVER=xxx.xxx.xxx.xxx;PORT=1433;DATABASE=dbname;UID=dbuserid;PWD=dbpass'
conn = pyodbc.connect(DB_WMS_NJ62)
这正确连接并允许我执行查询。
以下是我有问题的代码。更改IP,添加命名实例,并切换到指定端口63810
import pyodbc
DB_WMS_ONTMOD2 = 'DRIVER={ODBC Driver 13 for SQL Server};SERVER=xxx.xxx.xxx.xxx\\fontanasql;PORT=63810;DATABASE=dbname;UID=dbuserid;PWD=dbpass'
conn = pyodbc.connect(DB_WMS_ONTMOD2)
运行上述内容,我收到错误:
pyodbc.OperationalError: ('HYT00', '[HYT00] [unixODBC][Microsoft][ODBC Driver 13 for SQL Server]Login timeout expired (0) (SQLDriverConnect)')
任何帮助表示感谢。
分辨率: 戈德汤普森的建议奏效了。那是我的确切错误。 非常感谢你!
答案 0 :(得分:2)
Microsoft的SQL Server ODBC驱动程序不使用PORT =参数。相反,它们使用附加到服务器名称/地址的端口号和逗号,例如
SERVER=xxx.xxx.xxx.xxx,63810
此外,Linux的ODBC驱动程序无法解析实例名称。但是,您可以使用sqlserverport解决此问题。
最后,请注意,在指定目标服务器时,您应该使用实例名称(如果可能)或端口号,而不是两者。
答案 1 :(得分:0)
我也遇到了类似的问题,并在添加带有数据库服务器名称的端口后为我工作。 sqlserveeport模块对于识别端口号非常有用,因为很多时候我们都引用默认端口1433 https://github.com/gordthompson/sqlserverport