使用延续令牌通过 Python SDK 对 Azure CosmosDB 进行分页

问题描述 投票:0回答:2

我正在尝试使用 API 和 Azure Cosmos Python SDK 来实现分页。根据我的阅读和理解,我们需要

continuation tokens
。但是,我在 SDK 文档here中找不到任何会消耗令牌并从查询返回剩余数据的函数。我目前的流程:

  • 初始化 CosmosClient
  • 获取数据库对象
  • 获取容器对象
  • 查询容器,设置
    max_count_size=1
  • 获取分页响应,将其作为 API 调用的响应发送

现在,如果我想要查询中的下一个

page
,我应该在哪里传递延续令牌,以便我可以根据之前的 API 调用查询获取下一个
page

from azure.cosmos import exceptions, CosmosClient, PartitionKey
endpoint = "https://xxxxxxxx.documents.azure.com:443/"
key = '===xxxx===xxxx===xxx'

client = CosmosClient(endpoint, key)
database_name = 'test'
database = client.create_database_if_not_exists(id=database_name)
container_name = 'FamilyContainer'
container = database.get_container_client(container_name)
query = "SELECT * FROM c "
items = container.query_items(
        query=query,
        max_item_count=1,
        enable_cross_partition_query=True
    )

pager = items.by_page()
first_page = list(pager.next())
print("first page: ", first_page )

现在,如果我想要另一个 API 调用中的下一页,我应该在哪里传递

continuation token
? Azure SDK 版本:

$ pip freeze | grep azure
azure-core==1.9.0
azure-cosmos==4.2.0
azure-nspkg==3.0.2
azure-storage-blob==12.6.0
azure-storage-nspkg==3.1.0
python azure azure-cosmosdb
2个回答
2
投票
  • 这里有一个关于如何使用它的示例

  • 这里是 SDK 的 README 文件,其中包含许多提示和限制等有价值的信息。


0
投票

要继续处理所需的延续标记,请将其用作 by_page 方法的参数:

items = container.query_items(...)
pager = items.by_page(continuation_token)

因此,具有存储检查点的可分页迭代将如下所示:

items = container.query_items(...)

continuation_token = None  # or stored token to resume
pager = items.by_page(continuation_token)
for page in pager:
    for item in page:
        process_item(item)
    continuation_token = pager.continuation_token
    save_checkpoint(continuation_token)

我知道这是一个老问题,但我也遇到了同样的问题,但没有找到正确的答案。

© www.soinside.com 2019 - 2024. All rights reserved.