簡體   English   中英

帶有boto3的DynamoDB - 限制充當頁面大小

[英]DynamoDB with boto3 - limit acts as page size

根據boto3 文檔querylimit參數允許您限制 DynamoDB表/ GSI中已評估對象的數量。

但是,達到所需的限制時不會返回LastEvaluatedKey ,因此希望限制獲取結果數的客戶端將無法執行此操作

考慮以下代碼:

        while True:
            query_result = self._dynamodb_client.query(**query_kwargs)
            for dynamodb_formatted_item in query_result["Items"]:
                yield self._convert_dict_from_dynamodb_key_names(
                    from_dynamodb_formatted_dict_to_dict(dynamodb_formatted_item)
                )

            if "LastEvaluatedKey" not in query_result:
                return

我在這里錯過了什么嗎? 這是Boto庫中的錯誤嗎?

您的示例代碼缺少LastEvaluatedKey作為ExclusiveStartKey參數反饋到查詢中的關鍵部分! 因此,您在循環中重試相同的查詢,而不是繼續前一個查詢停止的位置。

例如,這里是工作代碼(我生成了一個數組,它不像你那樣很酷的生成器;-)):

def full_query(table, **kwargs):
    response = table.query(**kwargs)
    items = response['Items']
    while 'LastEvaluatedKey' in response:
        response = table.query(ExclusiveStartKey=response['LastEvaluatedKey'], **kwards)
        items.extend(response['Items'])
    return items

你現在可以跑

full_query(Limit=37, KeyConditions={...})

獲得所有結果,分批獲取37。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM