使用Boto在Amazon DynamoDB中进行分页

时间:2012-10-31 18:01:48

标签: python boto amazon-dynamodb

如何使用Boto python库对DynamoDB的结果进行分页?从Boto API文档中,我无法弄清楚它是否支持分页,尽管DynamoDB API确实具有分页支持。

3 个答案:

答案 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