如何使用 Boto python 库对来自 DynamoDB 的结果进行分页?从 Boto API 文档中,我无法确定它是否支持分页,尽管 DynamoDB API 确实支持分页。
问问题
7261 次
3 回答
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 相关问题的一个很好的参考 :)
于 2012-10-31T18:20:10.867 回答
4
也许我误解了这个问题,但我认为你让它变得比它需要的更困难。如果您在 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 的结果的分页。这同样适用于扫描请求。
于 2012-11-01T13:38:13.797 回答
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
于 2013-05-26T12:19:53.567 回答