Linux环境通过PuTTY私钥、SQLAlchemy和PyODBC连接SQL Server报错求解
问题解决方案
1 确认已注册的ODBC驱动名称
报错核心原因是连接字符串中填写的驱动名称与Linux系统中实际注册的ODBC驱动名称不匹配,SQL Server Native Client 11.0是Windows平台的驱动命名,Linux平台下微软官方SQL Server驱动命名规则不同。
执行以下命令查询系统中所有已注册的ODBC驱动:
odbcinst -q -d
输出结果通常为以下形式(版本号可能有差异):
[ODBC Driver 17 for SQL Server] [ODBC Driver 18 for SQL Server]
2 修改连接字符串参数
- 把
DRIVER参数的值替换为上一步查询到的驱动完整名称,注意Linux环境区分大小写,必须完全匹配 - 补全缺失的验证参数:如果是账号密码登录需要补充
PWD=你的密码;,如果使用ODBC Driver 18及以上版本,默认开启SSL证书校验,无合法证书的场景需要添加TrustServerCertificate=yes;跳过校验 - 如果你手中的
.ppk是SSH密钥,说明需要先建立SSH隧道映射SQL Server端口,再将SERVER参数修改为localhost,本地映射端口
修改后的代码示例:
import urllib.parse import pandas as pd import sqlalchemy as sa # 注意替换DRIVER名称、密码等参数为你实际的配置 params = urllib.parse.quote_plus( "DRIVER={ODBC Driver 17 for SQL Server};" "SERVER=dagger;" "DATABASE=test;" "UID=ubuntu;" "PWD=你的登录密码;" "TrustServerCertificate=yes;" ) engine = sa.create_engine("mssql+pyodbc:///?odbc_connect={}".format(params)) df = pd.read_sql("SELECT * FROM ROBALS", engine)
3 可选:修复依赖异常
如果修改参数后仍报错,重新编译安装pyodbc确保其正确关联unixODBC组件:
pip uninstall -y pyodbc && pip install pyodbc
内容的提问来源于stack exchange,提问作者nsk
相关产品推荐
相关产品推荐

