MacBook M1环境下pyodbc连接MS-SQL服务器报错求助
解决pyodbc连接MS-SQL时的TCP Provider错误10054
针对你遇到的pyodbc.OperationalError: ('08001', '[08001] [Microsoft][ODBC Driver 18 for SQL Server]TCP Provider: Error code 0x2746 (10054)')错误,结合你的Mac M1环境,给出以下具体解决思路:
1. 修复脚本中的连接字符串错误
你的代码存在逻辑错误:cnxn_str = pyodbc.connect(...)这行已经执行了连接操作,返回的是连接对象而非字符串,后续再用pyodbc.connect(cnxn_str)会直接引发异常。修正后的代码应该是:
import pyodbc import csv import boto3 # Credentials for SQL server server = "1.1.1.1" database = "db1" username = "user" password = "password" # 正确构建连接字符串并建立连接 cnxn_str = ( "DRIVER={ODBC Driver 18 for SQL Server};" f"SERVER={server};" f"DATABASE={database};" f"UID={username};" f"PWD={password}" ) cnxn = pyodbc.connect(cnxn_str)
2. 调整ODBC加密参数
ODBC Driver 18默认强制启用加密,若你的SQL Server未配置TLS或加密协商不兼容,会触发连接重置。在连接字符串中添加以下参数:
Encrypt=Optional:允许非加密连接TrustServerCertificate=Yes:跳过服务器证书验证(仅测试环境使用,生产环境需配置合法证书)
示例:
cnxn_str = ( "DRIVER={ODBC Driver 18 for SQL Server};" f"SERVER={server};" f"DATABASE={database};" f"UID={username};" f"PWD={password};" "Encrypt=Optional;" "TrustServerCertificate=Yes" )
3. 确保OpenSSL库匹配
Mac M1的arm64架构下,ODBC驱动可能无法正确找到OpenSSL 3.1.0的库,可通过设置环境变量指定路径:
export DYLD_LIBRARY_PATH=/usr/local/opt/openssl@3/lib
执行上述命令后再运行Python脚本,或把环境变量添加到~/.zshrc(或~/.bashrc)中永久生效。
4. 验证网络连通性
错误10054多数是网络层面的问题,先确认SQL Server端口(默认1433)是否可访问:
nc -zv 1.1.1.1 1433
若连接失败,检查:
- 服务器端防火墙/安全组是否开放1433端口
- 本地VPN、防火墙是否拦截了出站连接
- 服务器IP或端口是否填写错误
5. 确认ODBC驱动架构匹配
确保你安装的是arm64版本的ODBC Driver 18 for SQL Server,而非x86_64版本。重新安装对应架构的驱动后再测试连接。
内容的提问来源于stack exchange,提问作者Henk van der Duim
相关产品推荐
相关产品推荐

