【问题标题】:pyodbc connecting to named instancepyodbc 连接到命名实例
【发布时间】:2018-04-19 03:51:20
【问题描述】:

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

任何帮助表示赞赏。

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

【问题讨论】:

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


    【解决方案1】:

    Microsoft 的 SQL Server ODBC 驱动程序不使用 PORT= 参数。相反,他们使用以逗号附加到服务器名称/地址的端口号,例如

    SERVER=xxx.xxx.xxx.xxx,63810
    

    此外,适用于 Linux 的 ODBC 驱动程序无法解析实例名称。不过,您可以使用sqlserverport 来解决这个问题。

    最后,请注意,在指定目标服务器时,您应该使用实例名称(如果可能)端口号,而不是两者。

    【讨论】:

      【解决方案2】:

      在添加带有数据库服务器名称的端口后,我也遇到了类似的问题并为我工作。 sqlserveeport 模块对于识别端口号非常有帮助,正如我们多次看到的那样,我们都指的是默认端口 1433 https://github.com/gordthompson/sqlserverport

      【讨论】:

        猜你喜欢
        • 2015-08-08
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2015-05-22
        • 1970-01-01
        • 1970-01-01
        • 2015-07-03
        相关资源
        最近更新 更多