我一直在尝试获取GSI
中的一个上的所有记录,并且已经看到只有在我进行扫描时,才有选项可以在响应中使用LastEvaluatedKey
。我在pagination
中找不到使用boto3
查询的更好方法。是否可以使用查询进行分页。
导入boto3 来自boto3.dynamodb.conditions import Key,Attr
dynamodb = boto3.resource('dynamodb')
res = table.query(
TableName='myTable',
IndexName='my-index',
KeyConditionExpression=Key('myVal').eq(1)
)
while 'LastEvaluatedKey' in res:
for item in res['Items']:
print item #returns only a subset of them
答案 0 :(得分:2)
该文件提到了boto3.dynamodb.table.query()的限制:1MB数据。
你只能使用Paginator.Query返回迭代器(有意义)。
看来你可以用Paginator.Query替换你的table.query。尝试一下。
备注: boto3.resource()有一个问题:并非所有资源服务都已实现。因此对于dynamodb分页生成器,这是其中一种情况。
import boto3
dyno_client = boto3.client('dynamodb')
paginator = dyno_client.get_paginator('query')
response_iterator = paginator.paginate(.....)