AWS DynamoDB ExclusiveStartKey默认值

时间:2018-11-12 14:40:58

标签: python amazon-dynamodb

我正在尝试对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设置为FalseNone或首次呼叫时使用其他默认值,但是我没有找到任何东西,否则我将不得不完全排除ExclusiveStartKey,但是我也不知道该怎么做。

2 个答案:

答案 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