使用Python更新/替换CosmosDB文档时遇请求URL无效错误求助
Azure CosmosDB 文档替换更新报错解决方案
问题说明
使用Python SDK更新CosmosDB文档时,调用container.replace_item(doc['_self'], doc)报错CosmosHttpResponseError: (BadRequest) Request url is invalid,原因是当前SDK版本中,replace_item方法的第一个参数需传入文档的主键值,而非_self字段的链接。
解决方案
直接传入文档的主键(即容器分区键对应的值,此处为文档的id字段)作为第一个参数,替代_self链接。修改后的代码如下:
client = cosmos_client.CosmosClient('database_uri', 'database_key') database = client.create_database_if_not_exists(id='database_id') container = database.create_container_if_not_exists( id='container_id', partition_key=PartitionKey(path="/id"), offer_throughput=400 ) # 查询获取目标文档 q = 'SELECT * FROM c' items = list(container.query_items( query=q, enable_cross_partition_query=True )) doc = items[0] # 修改字段值 doc['name'] = 'CER' # 用文档的主键(id)替换_self链接 container.replace_item(doc['id'], doc)
补充说明
- 容器分区键设置为
/id时,文档的id既是主键也是分区键,直接传入即可;若分区键为其他字段,需同时指定对应分区键值(可通过doc['分区键字段名']获取)。 - 新版本CosmosDB Python SDK推荐使用主键而非
_self链接定位文档,可避免URL格式相关错误。
内容的提问来源于stack exchange,提问作者CER
相关产品推荐
相关产品推荐

