如何使用Boto python库对DynamoDB的结果进行分页?从Boto API文档中,我无法弄清楚它是否支持分页,尽管DynamoDB API确实具有分页支持。
答案 0 :(得分:8)
Boto确实支持使用“ExclusiveStartKey”和“Limit”组合的“分页”行为。例如,分页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相关问题有很好的参考:)
答案 1 :(得分:3)
也许我误解了这个问题,但我认为你让它变得比它需要的更难。如果你在boto(默认)中使用layer2 DynamoDB接口,它会为你处理分页。
因此,如果您想进行查询操作,只需执行以下操作:
import boto
c = boto.connect_dynamodb()
t = c.get_table('mytable')
for item in t.query(hash_key='foo'):
print item
这将自动处理DynamoDB的结果分页。这同样适用于扫描请求。
答案 2 :(得分:0)
你很有可能想要这样的东西:
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