尝试使用 pyodbc 连接到 SQL Server 数据库时出现操作错误

问题描述 投票:0回答:3

我正在尝试使用 Python 3 中的 pyodbc 连接到 SQL Server 数据库。但是当我尝试建立连接时出现错误。

我做了这样的事情:

import pyodbc
conn = pyodbc.connect('Driver={ODBC Driver 18 for SQL Server};Server=192.168.2.250;Database=DB;UID=username;PWD=password;')

我明白了:

OperationalError: ('08001', '[08001] [Microsoft][ODBC Driver 18 for SQL Server]SSL Provider: [error:1425F102:SSL routines:ssl_choose_client_version:unsupported protocol][error:140B40C7:SSL routines:SSL_do_handshake:peer did not return a certificate] (-1) (SQLDriverConnect)')

有人知道如何解决这个问题吗?该数据库不是我自己的,所以我希望有一个不需要更改任何设置的解决方案。

我在 Linux 的 Windows 子系统中运行 Ubuntu。

python sql-server odbc pyodbc
3个回答
6
投票

SQL Server 的 ODBC 驱动程序 18 中有一个重大更改

类似于几年前网络浏览器中从 HTTP 到 HTTPS 的默认更改(及其安全原因),我们正在将

Encrypt

 连接选项的默认值从 
no
 更改为 
yes
/
mandatory
.

SQL Server ODBC 驱动程序 18.0 发布

所以这个

conn = pyodbc.connect('Driver={ODBC Driver 18 for SQL Server};Server=192.168.2.250;Database=DB;UID=username;PWD=password;')

相同

conn = pyodbc.connect('Driver={ODBC Driver 18 for SQL Server};Server=192.168.2.250;Database=DB;UID=username;PWD=password;Encrypt=yes')
如果您不想要加密连接,则必须选择退出:

conn = pyodbc.connect('Driver={ODBC Driver 18 for SQL Server};Server=192.168.2.250;Database=DB;UID=username;PWD=password;Encrypt=no')

我们还更改了 TrustServerCertificate 的行为,使其不与加密设置绑定

因此,如果您的服务器使用自签名证书,您还必须选择退出证书验证。所以

conn = pyodbc.connect('Driver={ODBC Driver 18 for SQL Server};Server=192.168.2.250;Database=DB;UID=username;PWD=password;Encrypt=no;TrustServerCertificate=yes')
    

0
投票
我最终从 WSL 中取出了我的脚本。在 Windows 下运行相同的命令(使用 David 的添加或

ODBC Driver 17 for SQL Server

 而不是 18)在我的情况下可以正常工作。


0
投票
在尝试 pymssql 之前,我正在使用 pyodbc 库,但出现错误

导入pymssql

conn = pymssql.connect(服务器='172.30.1.19')

光标 = conn.cursor()

光标.执行(查询)

rows = 游标.fetchall()

无需端口、用户名和密码

© www.soinside.com 2019 - 2024. All rights reserved.