Pyodbc:登录超时错误

Kri*_*lal 7 sql-server pyodbc python-3.x ubuntu-16.04

我正在尝试pyodbc从运行Ubuntu 16.04的远程计算机连接到MS SQL Server 。

import pyodbc 

conn = pyodbc.connect(r'DRIVER=ODBC Driver 17 for SQL Server; SERVER=xxxTest-SRV; PORT=51333; DATABASE=TestDB; UID=xxxx; PWD=xxxx;')
Run Code Online (Sandbox Code Playgroud)

我收到以下错误:

pyodbc.OperationalError:('HYT00','[HYT00] [unixODBC] [Microsoft] [SQL Server的ODBC驱动程序17]登录超时已过期(0)(SQLDriverConnect)')

我尝试IP在连接字符串中使用服务器,但还是没有运气。

但是,我可以sqlcmd从终端连接到使用
以下作品:

sqlcmd -S xxxTest-SRV, 51333 -d TestDB -U xxxx -P xxxx
Run Code Online (Sandbox Code Playgroud)

我没有找到任何可以解决我问题的问题。

odbcinst.ini

[ODBC Driver 17 for SQL Server]
Description=Microsoft ODBC Driver 17 for SQL Server
Driver=/opt/microsoft/msodbcsql/lib64/libmsodbcsql-17.1.so.1.1
UsageCount=1
Run Code Online (Sandbox Code Playgroud)

pyodbc从Linux机器使用MS SQL Server连接似乎总是存在问题。有没有一种方法可以从Python连接到SQL Server。感谢您在解决此错误方面的帮助。谢谢。

[更新]

按照下面的答案,我更新了连接字符串。但是,现在我得到以下错误:

pyodbc.Error:('01000',“ [01000] [unixODBC] [驱动程序管理器]无法打开lib'/opt/microsoft/msodbcsql17/lib64/libmsodbcsql-17.0.so.1.1':找不到文件(0) (SQLDriverConnect)“)

我的odbcinst.ini文件驱动程序定义:

[ODBC Driver 17 for SQL Server]
Description=Microsoft ODBC Driver 17 for SQL Server
Driver=/opt/microsoft/msodbcsql17/lib64/libmsodbcsql-17.0.so.1.1
UsageCount=1
Run Code Online (Sandbox Code Playgroud)

从Linux计算机连接到MS SQL Server一直是噩梦。能否请你告诉它pyodbcunixODBC并且Driver版本是最稳定?

我已按照 Microsoft说明安装了驱动程序。我的pyodbc版本是4.0.23

Gor*_*son 6

Microsoft的SQL Server ODBC驱动程序不使用PORT=参数。端口号(如果有的话)用逗号附加到服务器名称/ IP,例如,

SERVER=xxxTest-SRV,51333;
Run Code Online (Sandbox Code Playgroud)


Vin*_*Odh 6

我遇到了同样的问题,但我的场景是使用 PyOdbc 模块通过 AWS Lambda 函数连接到托管在 ec2 实例上的 SQL 服务器。对我来说,用 ec2 实例的 IP 地址替换主机名修复了它。

我发现它无法解析 dns。因此,如果上述任何步骤对您不起作用,请尝试使用 IP 地址并在此处发表评论

  • 我在 Docker 中运行 Airflow 时遇到了同样的问题。将服务器名称替换为 IP 地址解决了该问题。 (2认同)

M.w*_*wol 5

在 VS Code 开发容器中使用 SQL Server docker 容器时,我遇到了同样的问题。查找 SQL Server 容器的 IP(归功于freecodecamp.org 如何获取 docker 容器 IP 地址)并将服务器名称替换为 IP 解决了问题

    conn = pyodbc.connect(
            "DRIVER={ODBC Driver 17 for SQL Server};" + "SERVER=172.xx.x.x;"
            "DATABASE=xxx;"
            "UID=sa;"
            "PWD=xxx;")
Run Code Online (Sandbox Code Playgroud)