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

Azure Resource Graph Python SDK响应不可迭代/下标访问问题求助

解决Azure Resource Graph Python SDK QueryResponse访问问题

我明白你遇到的困惑了——QueryResponse是Azure SDK返回的模型类实例,不是普通的字典或列表,所以直接遍历或者用下标访问肯定会报错。下面是正确的用法和原因解释:

问题根源

client.resources(request)返回的response是QueryResponse类的对象,它封装了查询结果的元数据(比如总记录数)和实际的资源数据,本身不是可迭代对象,也不能像字典那样用下标取值,必须通过它的属性来访问内容。

正确获取数据的方法

1. 访问资源列表

实际的资源数据存储在response.data属性里,这是一个可遍历的列表,每个元素是代表资源的模型对象:

# 遍历查询到的存储账户资源
for resource in response.data:
    logging.info(resource)

2. 把资源对象转成字典(更方便访问属性)

如果觉得直接操作模型对象麻烦,可以调用as_dict()方法把资源转成字典,这样就能用键值对的方式访问属性了:

for resource in response.data:
    resource_dict = resource.as_dict()
    # 示例:获取存储账户名称和订阅ID
    storage_name = resource_dict.get('name')
    sub_id = resource_dict.get('subscriptionId')
    logging.info(f"存储账户: {storage_name}, 订阅ID: {sub_id}")

3. 查看查询元数据

QueryResponse还提供了其他有用的属性:

  • response.total_records:查询匹配的总记录数(可能分页时和当前返回的数量不同)
  • response.count:当前响应返回的资源数量

修改后的完整代码

这里把你的代码调整成正确的版本:

credentials, *_ = get_azure_cli_credentials()
subscription_client = SubscriptionClient(credentials)
# 简化订阅ID的获取
subs_list = [sub.subscription_id for sub in subscription_client.subscriptions.list()]

client = rg.ResourceGraphClient(credentials)
request = QueryRequest(
    subscriptions=subs_list,
    query="resources | where type == 'microsoft.storage/storageaccounts'| where properties.supportsHttpsTrafficOnly == 'false'"
)
response = client.resources(request)

# 输出元数据
logging.info(f"查询到的总存储账户数: {response.total_records}")

# 遍历并输出资源信息
for resource in response.data:
    res_dict = resource.as_dict()
    logging.info(f"名称: {res_dict['name']}, 资源组: {res_dict['resourceGroup']}, HTTPS仅模式: {res_dict['properties']['supportsHttpsTrafficOnly']}")

为什么之前的方法会报错

  • for resource in response:QueryResponse没有实现迭代器接口,所以不能直接遍历,必须遍历它内部的data列表。
  • response['data']:模型类不支持下标访问,必须用.来访问属性,这是Azure Python SDK的统一设计——所有返回的结果都是强类型的模型对象,而非原始字典。

内容的提问来源于stack exchange,提问作者David O'Brien

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.07 16:17:55