在尝试在Ubuntu 20.04上第一次安装和使用pyodbc时,出现TCP Provider:错误代码0x2746的错误。

4

我希望能在Python中远程连接我的网络上的SQL Server数据库,所以我安装了pyodbc,并按照此页面上给出的步骤进行了操作。它指示先通过以下说明“安装适用于SQL Server的Microsoft ODBC驱动程序”。

完成这些步骤后(只需这些步骤),我确定了驱动程序路径并尝试在Python中运行此代码。

import pyodbc as podbc
conn = podbc.connect("Driver=/opt/microsoft/msodbcsql17/lib64/libmsodbcsql-17.8.so.1.1;"
                 "Server=192.XXX.XXX.XXX;"
                 "Database=db_name;"
                 "uid=xxxx;"
                 "pwd=xxxx;")

执行时我遇到了错误:

pyodbc.OperationalError: ('08001', '[08001] [Microsoft][ODBC Driver 17 for SQL Server]TCP Provider: Error code 0x2746 (10054) (SQLDriverConnect)')

如果您能告诉我为什么出现此错误以及我是否在安装过程中漏掉了任何步骤,会很有帮助。此外,我能够通过 Windows 计算机远程访问 SQL Server,但是每当我尝试通过 Ubuntu 计算机进行访问时,就会出现此错误。

1
这看起来不对。您想要定义的驱动程序很可能是{ODBC Driver 17 for SQL Server}。您是否安装了Microsoft ODBC Driver for SQL Server - Thom A
1
如果您按照第一个链接中的说明进行操作,您应该已经注意到第3步:使用pyodbc连接SQL的概念验证。正如Larnu所提到的,您应该使用DRIVER={ODBC Driver 17 for SQL Server};,并且您还应该在服务器名称/IP地址前加上tcp:以强制使用TCP/IP连接,即:Server=tcp:192.XXX.XXX.XXX; - AlwaysLearning
@AlwaysLearning 我在类似的Linux(Mint)设置上遇到了相同的错误,并使用了你建议的驱动程序名称和强制TCP。最近Linux(Ubuntu)设置中发生了一些变化,导致我的安装停止工作,这个错误是唯一的提示,说明出了什么问题... - DPSSpatial
@DPSSpatial 如果它最近一直在工作,但突然出现问题,我建议尝试在你的连接字符串中添加;Encrypt=no,看看是否可以解决问题。如果这样做可以解决问题,那么很可能是因为你连接到一个(非常)旧的/未修补的SQL Server实例,它没有TLS 1.2支持,并且你在Linux客户端上安装了更新的OpenSSL库,禁用了TLS 1.0和TLS 1.1协议。 - AlwaysLearning
@AlwaysLearning 感谢你的提示,不幸的是我还是卡住了。我不能排除在这个 Mint 系统上安装出现错误的可能性,虽然我们的 CentOS 服务器可以正常运行,但 ODBC 驱动程序已经安装了几年... 我会继续挖掘!再次感谢! - DPSSpatial
1个回答

0

我在为AWS Sagemaker处理作业构建基于ubuntu:20.04的docker镜像后遇到了同样的问题。我通过安装特定版本的openssl(即1.1.1p)解决了这个错误。

以下是我添加到docker文件中的命令:

RUN wget https://www.openssl.org/source/openssl-1.1.1p.tar.gz -O openssl-1.1.1p.tar.gz && \
tar -zxvf openssl-1.1.1p.tar.gz && \
cd openssl-1.1.1p && \
./config && \
make && \
make install && \
ldconfig

在安装适当的 Microsoft SQL Server ODBC 驱动程序的命令之前(在我的情况下是 msodbcsql17),应添加此行。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接