pyodbc 连接到命名实例
pyodbc connecting to named instance
在 linux 框上使用 pyodbc 连接到 SQL 服务器命名实例时,我一直在努力找出错误。当连接到其他 SQL 未使用命名实例的服务器时,我可以正常连接。下面的示例在没有命名实例的服务器上运行:
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)')
感谢任何帮助。
决议:
Gord Thompson 的建议奏效了。这些都是我的错误。
非常感谢!
Microsoft 的 SQL 服务器 ODBC 驱动程序不使用 PORT= 参数。相反,他们使用附加到服务器 name/address 的端口号和逗号,例如
SERVER=xxx.xxx.xxx.xxx,63810
此外,Linux 的 ODBC 驱动程序无法解析实例名称。但是,您可以使用 sqlserverport 来解决这个问题。
最后,请注意,在指定目标服务器时,您应该使用实例名称(如果可能)或端口号,而不是两者。
我也遇到了类似的问题,在添加带有数据库服务器名称的端口后为我工作。 sqlserveeport 模块对于识别端口号非常有帮助,因为很多时候我们都指的是默认端口 1433
https://github.com/gordthompson/sqlserverport
在 linux 框上使用 pyodbc 连接到 SQL 服务器命名实例时,我一直在努力找出错误。当连接到其他 SQL 未使用命名实例的服务器时,我可以正常连接。下面的示例在没有命名实例的服务器上运行:
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)')
感谢任何帮助。
决议: Gord Thompson 的建议奏效了。这些都是我的错误。 非常感谢!
Microsoft 的 SQL 服务器 ODBC 驱动程序不使用 PORT= 参数。相反,他们使用附加到服务器 name/address 的端口号和逗号,例如
SERVER=xxx.xxx.xxx.xxx,63810
此外,Linux 的 ODBC 驱动程序无法解析实例名称。但是,您可以使用 sqlserverport 来解决这个问题。
最后,请注意,在指定目标服务器时,您应该使用实例名称(如果可能)或端口号,而不是两者。
我也遇到了类似的问题,在添加带有数据库服务器名称的端口后为我工作。 sqlserveeport 模块对于识别端口号非常有帮助,因为很多时候我们都指的是默认端口 1433 https://github.com/gordthompson/sqlserverport