【问题标题】:Paginating a DynamoDB query in boto3在 boto3 中对 DynamoDB 查询进行分页
【发布时间】:2017-01-14 06:53:51
【问题描述】:

如果 DynamoDB 查询中的所有结果跨越一页以上,我如何循环它们? This answer 暗示分页内置在查询函数中(至少在 v2 中),但是当我在 v3 中尝试此操作时,我的项目似乎有限:

import boto3
from boto3.dynamodb.conditions import Key, Attr

dynamodb = boto3.resource('dynamodb')
fooTable = dynamodb.Table('Foo')
response = fooTable.query(
    KeyConditionExpression=Key('list_id').eq('123')
)

count = 0

for i in response['Items']:
    count += 1

print count # Prints a subset of my total items

【问题讨论】:

  • 应该可以。尝试scan() 整张桌子,以确保您确实应该获得更多物品。
  • 谢谢@joarleymoraes,但我确实试过了,DynamoDB 控制台中的计数大约是 boto3 返回的 10 倍。
  • list_id 是字符串还是整数?也许你想检查一下。
  • 有什么理由使用带有计数器的for loop 而不是print len(response['Items'])?顺便说一句,我和你有同样的问题。
  • @JoãoAbrantes 没有理由,这只是用于提问的示例代码:)

标签: python aws-lambda pagination amazon-dynamodb boto3


【解决方案1】:

ExclusiveStartKey 是您要查找的属性的名称。 使用上一个操作中为 LastEvaluatedKey 返回的值。

ExclusiveStartKey 的数据类型必须是字符串、数字或二进制。不允许设置数据类型。

http://boto3.readthedocs.io/en/latest/reference/services/dynamodb.html#DynamoDB.Client.query

【讨论】:

  • 可能应该更清楚 - 我知道我可以使用 ExclusiveStartKey 手动分页。但在链接的答案中,@garnaat(boto 的作者!)建议它应该在查询功能的框中可用。
  • @Jonathan 听起来@garnaat 可能指的是别的东西。此处答案中的文档非常明确。每次查询最多可获得 1MB 的数据,应用程序开发人员可以使用 ExclusiveStartKey 获取更多数据。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2019-10-13
  • 1970-01-01
  • 2018-10-31
  • 1970-01-01
  • 1970-01-01
  • 2019-11-14
  • 1970-01-01
相关资源
最近更新 更多