我正在尝试对DynamoDB进行查询,如果返回了LastEvaluatedKey
(表示查询超过1 MB),我想进行其他查询以便从表中获取所有必需的数据,在下一个查询中使用LastEvaluatedKey
作为ExclusiveStartKey
。
这是我现在拥有的代码:
query_response = table.query(
KeyConditionExpression=Key('brand').eq(brand)
)
pagination_key = None
if 'LastEvaluatedKey' in query_response:
pagination_key = query_response['LastEvaluatedKey']
while pagination_key:
next_query_response = table.query(
KeyConditionExpression=Key('brand').eq(brand),
ExclusiveStartKey=pagination_key
)
但是,我想通过将查询提取到方法中并将其pagination_key作为参数传递来重新编码此代码。为此,我必须能够将ExclusiveStartKey
设置为False
,None
或首次呼叫时使用其他默认值,但是我没有找到任何东西,否则我将不得不完全排除ExclusiveStartKey
,但是我也不知道该怎么做。
答案 0 :(得分:0)
我找到了一种构建参数的简单方法:
query_params = { 'KeyConditionExpression': Key('brand').eq(brand) } if pagination_key: query_params['ExclusiveStartKey'] = pagination_key query_response = table.query(query_params)
答案 1 :(得分:0)
使用关键字参数**kwargs
可能看起来像这样。也,
我正在设置查询,并且每次都只更新ExclusiveStartKey
。
query = { "KeyConditionExpression": Key('brand').eq(brand) }
ExclusiveStartKey = None
while True:
if ExclusiveStartKey is not None:
query['ExclusiveStartKey'] = ExclusiveStartKey
response = table.query(**query)
if 'LastEvaluatedKey' in query_response:
ExclusiveStartKey = query_response['LastEvaluatedKey']
else:
break