我该如何使用Boto Python库对DynamoDB的结果进行分页?从Boto API文档中,我无法确定它是否支持分页,尽管DynamoDB API确实支持分页。
我该如何使用Boto Python库对DynamoDB的结果进行分页?从Boto API文档中,我无法确定它是否支持分页,尽管DynamoDB API确实支持分页。
Scan
,可以进行分页处理。
下面是一个例子,可以按10个数据一组解析整个表格。esk = None
while True:
# load this batch
scan_generator = MyTable.scan(max_results=10, exclusive_start_key=esk)
# do something usefull
for item in scan_generator:
pass # do something usefull
# are we done yet ?
else:
break;
# Load the last keys
esk = scan_generator.kwargs['exclusive_start_key'].values()
编辑:
正如 @garnaat 指出的那样,我可能误解了您的实际目标。上面的建议允许您提供分页,就像 SO 对问题进行分页一样。每页不超过15个。
如果您只需要一种方法来加载给定 Scan
产生的整个结果集,则 Boto 是一个很棒的库,并且已经为您抽象出这个过程,无需像我回答中那样使用黑魔法。在这种情况下,您应该遵循他 (@garnaat) 的建议。顺便说一句,他是 Boto 的作者,因此是 Boto 相关问题的重要参考 :)
import boto
c = boto.connect_dynamodb()
t = c.get_table('mytable')
for item in t.query(hash_key='foo'):
print item
这将自动处理来自DynamoDB的结果分页。对于扫描请求,同样适用。
.query()
方法的方式!那份文档需要更新! - CpILL你很可能想要类似这样的东西:
qms = tms.query(hash_key=415772421368583351, max_results=2, exclusive_start_key=None)
for i in qms:
print i
lek = qms.last_evaluated_key
qms = tms.query(hash_key=415772421368583351, max_results=2, exclusive_start_key=lek)
for i in qms:
print i
当然,这只是一个用于演示的愚蠢例子。
关键在于使用last_evaluated_key
而不是exclusive_start_key