You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

Python连接Azure SQL Server时登录失败的问题排查

Python连接Azure SQL Server时登录失败的问题排查

看起来你遇到的登录失败问题,结合你的代码和错误提示,核心问题大概率出在连接字符串的配置错误上,我帮你梳理几个关键的修正点:

1. 用户名格式完全错误

看你代码里的连接字符串拼接:

UID={username}@myazure.windows.net

而你定义的username变量是myemail@myemail.com,这会导致最终的用户名变成myemail@myemail.com@myazure.windows.net——这明显不符合Azure AD账号的格式要求!

如果是使用Azure AD账号登录,UID直接填完整的用户邮箱(也就是你的username变量本身)即可,不需要额外拼接服务器后缀:

UID={username}

2. 未启用Azure AD认证参数

你代码里定义了authentication = "ActiveDirectoryInteractive",但完全没把这个参数加入到连接字符串里!

根据你使用的认证方式,需要在连接字符串中添加对应的Authentication参数:

  • 如果你是用Azure AD密码认证(输入账号密码直接登录):添加Authentication=ActiveDirectoryPassword
  • 如果你是用Azure AD交互式认证(弹出浏览器登录):添加Authentication=ActiveDirectoryInteractive,并且可以去掉PWD参数(交互式认证不需要在代码里传密码)

3. 修正后的连接字符串示例

这里给你调整后的连接字符串代码,以Azure AD密码认证为例:

params = quote_plus(
    f"DRIVER={driver};SERVER={server},1433;DATABASE={database};UID={username};PWD={password};Encrypt=yes;TrustServerCertificate=no;Connection Timeout=60;Authentication=ActiveDirectoryPassword;"
)

其他可能的排查点

除了代码问题,你还可以快速检查:

  • 确认Azure SQL Server的防火墙规则是否允许你的本地IP地址访问(可以在Azure门户的SQL Server→防火墙和虚拟网络里添加)
  • 确认你的Azure AD账号有该SQL数据库的db_owner或至少db_datawriter + db_ddladmin权限
  • 如果你是用SQL本地账号(非Azure AD),那连接字符串不需要加Authentication参数,且UID就是SQL账号的用户名(不需要加邮箱后缀)

额外的代码优化建议

虽然和当前登录问题无关,但你的建表逻辑可以简化:其实df.to_sql本身支持自动创建表,你可以去掉手动拼接CREATE TABLE的代码,直接用if_exists='replace'参数,同时通过dtype指定列类型,还能避免手动拼接SQL的语法错误:

# 替换原来的建表和插入逻辑
df.to_sql(
    name=table_name,
    con=engine,
    schema=schema,
    if_exists='replace',
    index=False,
    method="multi",
    chunksize=50,
    dtype={
        'int64': sqlalchemy.types.BigInteger(),
        'float64': sqlalchemy.types.Float(),
        'object': sqlalchemy.types.NVARCHAR(length=255),
        # 其他列类型映射...
    }
)

备注:内容来源于stack exchange,提问作者Roberto92

火山引擎 最新活动