使用boto3从不带分区键的dynamodb扫描

Scanning from dynamodb with out partition key using boto3

下面是代码

import boto3
from boto3.dynamodb.conditions import Attr
dynamodb = boto3.resource('dynamodb')
table = dynamodb.Table('mytable')

def lambda_handler(event, context):
    response_list = []
    scan_response = table.scan(
        FilterExpression=Attr('id').eq(event['id']) & Attr(
        'name').eq(event['name']) & Attr(
        'role').eq('Manager')
    )
    response_list.extend(scan_response['Items'])
    while scan_response.get('LastEvaluatedKey'):
        scan_response = table.scan(
            FilterExpression=Attr('id').eq(event['id']) & Attr(
        'name').eq(event['name']) & Attr(
        'role').eq('Manager')
         )
         response_list.extend(scan_response['Items'])

    print( response_list)

我的循环 运行 只在第一项上无限循环。问题出在哪里?

您没有将 LastEvaluatedKey 传递给 scan() 调用,因此它每次都从头开始扫描。

改成这样:

while scan_response.get('LastEvaluatedKey'):
    scan_response = table.scan(
        ExclusiveStartKey=scan_response.get('LastEvaluatedKey'),
        FilterExpression=Attr('id').eq(event['id']) & Attr(
    'name').eq(event['name']) & Attr(
    'role').eq('Manager')
     )