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

如何在本地测试使用Azure托管身份连接Azure SQL的Python代码

本地测试Python Azure托管身份连接Azure SQL的方法

Python完全支持托管身份逻辑的本地测试,实现逻辑和你已经跑通的C#本地测试方案一致,不需要部署到Azure App Service即可验证功能。

调整方案说明

你当前代码使用的Authentication=ActiveDirectoryIntegrated验证参数仅适配特定域环境,跨平台或者非域本地环境很难直接生效,推荐改用手动获取Azure AD访问令牌的方式实现连接,这套代码本地测试和云端部署完全通用,不用二次修改。

具体操作步骤

  • 第一步:安装依赖库
    除了你已经用到的pyodbc、pandas之外,补充安装Azure身份认证库:
    pip install azure-identity
    
  • 第二步:本地登录Azure账号
    任选一种方式完成本地身份认证:
    • 安装Azure CLI后执行az login,按提示完成账号登录
    • 用VS Code Azure扩展完成账号登录
    • 用Azure PowerShell执行Connect-AzAccount完成登录
      注意:你登录的这个账号需要和App Service托管身份拥有完全相同的Azure SQL访问权限,确保测试结果和云端一致。
  • 第三步:调整连接代码
    改用DefaultAzureCredential自动获取令牌,该类在本地会读取你刚才登录的账号凭证,部署到App Service后会自动读取托管身份凭证,无需修改代码:
    import pyodbc as db
    import pandas as pd
    from azure.identity import DefaultAzureCredential
    
    # 定义Azure SQL的令牌请求scope
    SQL_SCOPE = "https://database.windows.net/.default"
    
    # 自动获取令牌(本地用登录的个人凭证,云端用托管身份凭证)
    credential = DefaultAzureCredential()
    token = credential.get_token(SQL_SCOPE)
    token_bytes = token.token.encode("utf-16-le")
    token_struct = (b"\x00" * len(token_bytes)) + token_bytes
    
    # 建立数据库连接
    conn = db.connect(
        'Driver={ODBC Driver 17 for SQL Server};'
        'Server=testdb.database.windows.net;'
        'Database=studentdb;',
        attrs_before={1256: token_struct}
    )
    
    # 后续查询逻辑和你原有代码一致
    query = pd.read_sql_query('SELECT * FROM STUDENT', conn)
    frame = pd.DataFrame(query)
    return func.HttpResponse(frame.to_json(orient="index"), status_code=200)
    

可选替代方案

如果你不想用个人账号测试,也可以申请对应服务主体的权限,本地设置AZURE_CLIENT_ID、AZURE_TENANT_ID、AZURE_CLIENT_SECRET三个环境变量,DefaultAzureCredential会自动读取这三个变量的凭证模拟托管身份,测试效果完全一致。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.28 16:54:01