You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用指定SQL Server地址创建SQLAlchemy引擎并解决连接错误?

问题:无法通过SQLAlchemy连接远程SQL Server

我正尝试从新服务器连接托管的Microsoft SQL Server数据库,但不确定SQLAlchemy create_engine函数的正确连接字符串。我的代码如下:

driver = 'SQL Server'
server = 'test-sql2017.xxxx.ttttttt.com'
database = 'reporting'
user = 'username'
pw = 'password'


conn_string = f"""DRIVER={driver};SERVER={server};DATABASE={database};UID={user};PWD={pw};"""
connection_url = URL.create("mssql+pyodbc", query={"odbc_connect": conn_string})
engine = sa.create_engine(connection_url)

query = 'yyyyy'
data = pd.read_sql(query, engine)

运行代码时遇到如下错误:

OperationalError: (pyodbc.OperationalError) ('08001', '[08001] [Microsoft][ODBC SQL Server Driver][DBNETLIB]SQL Server does not exist or access denied. (17) (SQLDriverConnect);
[08001] [Microsoft][ODBC SQL Server Driver][DBNETLIB]ConnectionOpen (Connect()). (53)')

解决方法
  • 更新ODBC驱动
    你当前使用的'SQL Server'是旧版驱动,兼容性较差。建议替换为最新的'ODBC Driver 17 for SQL Server'或'ODBC Driver 18 for SQL Server',旧驱动可能不支持TLS加密等现代连接要求,这是导致连接失败的常见原因。

  • 指定端口号
    如果SQL Server未使用默认的1433端口,需在服务器地址后追加端口,格式为服务器地址,端口,例如'test-sql2017.xxxx.ttttttt.com,1433'。具体端口可联系数据库管理员确认。

  • 排查网络连通性
    在新服务器上执行以下操作验证网络:

    • 用ping test-sql2017.xxxx.ttttttt.com检查服务器地址能否正常解析
    • 用telnet test-sql2017.xxxx.ttttttt.com 1433(替换为实际端口)测试端口是否开放
      若ping失败,需排查DNS配置;若telnet失败,可能是本地或服务器端防火墙拦截了连接。
  • 验证账号权限
    确认使用的username和password具备远程连接目标数据库reporting的权限,且账号未被锁定、密码未过期。可尝试用SQL Server Management Studio(SSMS)从新服务器用相同账号连接,快速验证权限有效性。

  • 简化连接字符串写法
    可以直接使用SQLAlchemy的URL格式构造引擎,避免手动拼接ODBC字符串,示例:

    engine = sa.create_engine(f"mssql+pyodbc://{user}:{pw}@{server}/{database}?driver=ODBC+Driver+17+for+SQL+Server")
    

内容的提问来源于stack exchange,提问作者bwainwright

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.03 21:06:31