pyodbc连接到命名实例

时间:2018-04-19 03:51:21

标签: sql-server python-3.x pyodbc

在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)')

任何帮助表示感谢。

分辨率: 戈德汤普森的建议奏效了。那是我的确切错误。 非常感谢你!

2 个答案:

答案 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