我已经编写了以下python代码以从表中获取数据,但未按我的要求获取所有项目。当我检查DynamoDb的AWS控制台页面时,与从脚本中获得的条目相比,可以看到更多的条目。
from __future__ import print_function # Python 2/3 compatibility
import boto3
import json
import decimal
from datetime import datetime
from boto3.dynamodb.conditions import Key, Attr
import sys
# Helper class to convert a DynamoDB item to JSON.
class DecimalEncoder(json.JSONEncoder):
def default(self, o):
if isinstance(o, decimal.Decimal):
if o % 1 > 0:
return float(o)
else:
return int(o)
return super(DecimalEncoder, self).default(o)
dynamodb = boto3.resource('dynamodb', aws_access_key_id = '',
aws_secret_access_key = '',
region_name='eu-west-1', endpoint_url="http://dynamodb.eu-west-1.amazonaws.com")
mplaceId = int(sys.argv[1])
table = dynamodb.Table('XYZ')
response = table.query(
KeyConditionExpression=Key('mplaceId').eq(mplaceId)
)
print('Number of entries found ', len(response['Items']))
我也在aws控制台上做了同样的事情。通过mplaceId查询。
它为什么会发生?
答案 0 :(得分:2)
dynamodb.Table.query()
返回最大1MB的数据。来自boto3
documentation:
单个
Query
操作将最多读取设置的最大项目数(如果使用Limit
参数)或最多1 MB的数据,然后使用{ {1}}。如果响应中包含FilterExpression
,则需要对结果集进行分页。有关更多信息,请参阅《 Amazon DynamoDB开发人员指南》中的Paginating the Results。
这实际上不是LastEvaluatedKey
的限制,而是基础boto3
-API的限制。
您可以使用query
的{{3}}来代替自己实现分页。这是一个显示boto3
提供的built-in pagination 用法的示例:
boto3