我正在尝试使用 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。
SQL Server 的 ODBC 驱动程序 18 中有一个重大更改
类似于几年前网络浏览器中从 HTTP 到 HTTPS 的默认更改(及其安全原因),我们正在将所以这个
Encrypt
连接选项的默认值从no
更改为yes
/mandatory
.
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')
ODBC Driver 17 for SQL Server
而不是 18)在我的情况下可以正常工作。
导入pymssql
conn = pymssql.connect(服务器='172.30.1.19')
光标 = conn.cursor()
光标.执行(查询)
rows = 游标.fetchall()
无需端口、用户名和密码