使用pyodbc从Linux连接到SQL Server命名示例

piah890a  于 2023-01-04  发布在  Linux
关注(0)|答案(2)|浏览(236)

我目前正在尝试使用PyODBC连接到SQL Server(我无法看到它,但有它的凭据)。我的代码可以在Windows桌面上工作,但移到RedHat Linux机器上时无法工作。我需要它在Linux上支持一个项目。
这是我的想法

server = 'tcp:myserver\inst1'
database = 'mydatabase'
username = 'myusername'
password = 'mypassword'

cnxn = pyodbc.connect('DRIVER={ODBC Driver 13 for SQL Server};SERVER=' + server + ';DATABASE=' + database + ';UID=' + username + ';PWD=' + password)

这是我得到的错误:

pyodbc.OperationalError: ('HYT00', u'[HYT00] [unixODBC][Microsoft][ODBC Driver 13 for SQL Server]Login timeout expired (0) (SQLDriverConnect)')

Windows版本和Linux版本之间的一个区别是驱动程序部分。Windows使用"{SQL Server}",而Linux版本使用"{ODBC Driver 13 for SQL Server}"。
在我的/etc/odbcinst.ini文件中,我有以下信息:

[ODBC Driver 13 for SQL Server]
Description=Microsoft ODBC Driver 13 for SQL Server
Driver=/opt/microsoft/msodbcsql/lib64/libmsodbcsql-13.1.so.9.1
UsageCount=1

有人有什么建议吗?

h7wcgrx3

h7wcgrx31#

使用驱动程序路径而不是驱动程序名称。在示例中,使用完整的/opt/microsoft/msodbcsql/lib 64/libmsodbcsql-13.1.so.9.1

0g0grzrc

0g0grzrc2#

与Windows版本的Microsoft ODBC Drivers for SQL Server不同,Linux版本的驱动程序无法解析SQL Server示例名称。因此,在Windows客户端上,我们可以使用以下命令(前提是SQL Browser服务正在服务器上运行)

cnxn = pyodbc.connect(
    "Driver=ODBC Driver 17 for SQL Server;"
    r"Server=myserver\SQLEXPRESS;"
    # and so on
)

但是在Linux上不起作用,但是我们可以使用sqlserverport模块(我维护它)从SQL Browser服务检索端口号:

import pyodbc
import sqlserverport

servername = "myserver"
serverspec = f"{servername},{sqlserverport.lookup(servername, 'SQLEXPRESS')}"
conn = pyodbc.connect(
    "Driver=ODBC Driver 17 for SQL Server;"
    f"Server={serverspec};"
    # and so on

相关问题