使用boto3从dynamodb扫描分区键


  • 我需要从dynamodb中提取与id, name, role匹配的项目

  • 以上3个只是表的属性,它们不是部分键或排序键

下面是代码

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')
)

最新更新