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

CentOS环境下可通过tsql连接Azure SQL,为何pymssql无法连接?

解决pymssql连接Azure SQL Server失败的问题

既然你用T-SQL能正常连接,说明服务器本身、网络通路和账号权限都没问题,问题大概率出在pymssql的连接配置细节上。我给你梳理几个常见的排查方向和解决办法:

1. 强制开启加密(Azure SQL的硬性要求)

Azure SQL Server默认要求所有连接必须加密,而旧版本的pymssql可能没有默认开启这个选项。你需要在连接时明确指定加密参数:

import pymssql

try:
    conn = pymssql.connect(
        server="your-server-name.database.windows.net",
        port=1433,  # Azure SQL默认端口,必须指定
        user="your-sql-username@your-server-name",  # 注意格式:用户名@服务器名
        password="your-password",
        database="your-database-name",
        encrypt="yes"  # 关键参数,必须开启
    )
    print("连接成功!")
    conn.close()
except Exception as e:
    print(f"连接失败:{str(e)}")

2. 检查用户名格式是否正确

Azure SQL的SQL Server身份验证账号,登录名必须是username@servername的格式(servername是你Azure上的服务器前缀,比如myserver对应myserver.database.windows.net)。如果只写用户名,pymssql会无法正确识别身份。

3. 升级pymssql到最新版本

旧版本的pymssql对Azure SQL的加密协议支持可能不完善,建议升级到最新稳定版:

pip install --upgrade pymssql

4. 如果是Azure AD身份验证,换用pyodbc

pymssql对Azure AD身份验证的支持有限,如果你用的是Azure AD账号(比如AAD用户、服务主体),建议改用pyodbc,它对Azure SQL的兼容性更好。示例代码:

import pyodbc

conn_str = (
    "DRIVER={ODBC Driver 17 for SQL Server};"
    "SERVER=your-server-name.database.windows.net;"
    "DATABASE=your-database-name;"
    "UID=your-aad-username@your-domain.com;"
    "PWD=your-aad-password;"
    "Encrypt=yes;"
    "TrustServerCertificate=no;"
    "Connection Timeout=30;"
)
try:
    conn = pyodbc.connect(conn_str)
    print("连接成功!")
    conn.close()
except Exception as e:
    print(f"连接失败:{str(e)}")

5. 排查网络细节(概率较低,但可以确认)

虽然T-SQL能连接,但如果pymssql运行的环境有特殊网络配置(比如代理、防火墙规则),可以检查:

  • 出站端口1433是否开放
  • 是否需要设置代理参数(pymssql支持通过proxy_host和proxy_port指定代理)

如果以上步骤都试过还是报错,可以把完整的异常信息贴出来,我再帮你进一步分析。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.19 08:16:27