[英]DynamoDB with boto3 - limit acts as page size
根據boto3 文檔 , query
的limit
參數允許您限制 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.