我正在尝试使用 API 和 Azure Cosmos Python SDK 来实现分页。根据我的阅读和理解,我们需要
continuation tokens
。但是,我在 SDK 文档here中找不到任何会消耗令牌并从查询返回剩余数据的函数。我目前的流程:
max_count_size=1
现在,如果我想要查询中的下一个
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
要继续处理所需的延续标记,请将其用作 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)
我知道这是一个老问题,但我也遇到了同样的问题,但没有找到正确的答案。