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

无法从Azure Cosmos DB容器检索数据的问题求助

Azure Cosmos DB ReadItem 数据检索失败问题解决

问题根源

核心问题在于插入的Item未包含容器指定的分区键字段:

  • 容器分区键配置为/partition,但调用create_item时传入的body={"id": "id-1"}未包含partition字段
  • Cosmos DB会自动将缺失分区键字段的Item分配到分区键值为undefined的逻辑分区
  • 后续调用read_item时传入的partition_key参数("/partition"、PartitionKey对象、"id-1")均不匹配实际存储的undefined值,因此返回NotFound或Bad Request错误

解决方案

方案1:插入Item时明确指定分区键字段(推荐)

这是符合Cosmos DB最佳实践的方式,确保Item存储到预期分区,后续读取可精准定位:

from azure.cosmos import CosmosClient, PartitionKey

cosmos_client = CosmosClient(url=cosmos_endpoint, credential=cosmos_key)
database = cosmos_client.create_database_if_not_exists(id="database")
container = database.create_container_if_not_exists(id="container", partition_key=PartitionKey(path="/partition"))

# 插入包含分区键的Item
container.create_item(body={"id": "id-1", "partition": "your-partition-value"})
# 使用对应的分区键值读取
container.read_item(item="id-1", partition_key="your-partition-value")

方案2:读取已存在的无分区键字段Item

如果需要读取已插入的、缺失分区键字段的Item,需传入匹配undefined的分区键参数:

# 方式1:传入None作为partition_key
container.read_item(item="id-1", partition_key=None)

# 方式2:使用PartitionKey对象指定None值
container.read_item(item="id-1", partition_key=PartitionKey(None))

错误参数分析

你之前尝试的参数均不符合要求:

  • partition_key="/partition":这是分区键的路径,不是实际分区键值,会触发Bad Request
  • partition_key=PartitionKey(path="/partition"):传递的是路径而非实际值,无效
  • partition_key="id-1":Item的id与分区键值不匹配,无法定位对应分区

容器配置验证

从你提供的容器配置来看,分区键设置正确:

{
  "partitionKey": {
    "kind": "Hash",
    "paths": ["/partition"],
    "version": 2
  }
}

无需修改容器配置,只需调整Item插入和读取的逻辑即可。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.21 03:28:25