2016-09-06 24 views
4

複数のページにまたがる場合、すべての結果をDynamoDBクエリでループする方法はありますか? This answerは、ページネーションは、(少なくとも、V2での)クエリ機能に組み込まれていることを意味しますが、私はV3でこれをしようとすると、私の項目が制限されているように見える:boto3でDynamoDBクエリをページする

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 
+0

これでうまくいくはずです。テーブル全体を 'scan()'して実際にもっと多くのアイテムを取得することを確認してください。 – joarleymoraes

+0

@joarleymoraesありがとうございましたが、私は正確にそれを試しました。そして、DynamoDBコンソールの数は、boto3が返すものの約10倍です。 – Jonathan

+0

list_id文字列か整数か。たぶんあなたはそれをチェックしたい。 – joarleymoraes

答えて

1

ExclusiveStartKeyは、あなたが探している属性の名前です。 前回の操作でLastEvaluatedKeyに返された値を使用します。

ExclusiveStartKeyのデータ型は、String、NumberまたはBinaryでなければなりません。設定されたデータ型は許可されません。

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

+0

おそらくもっと明確になっているはずです。私は、 'ExclusiveStartKey'を使って手動でページを設定できることを知っています。しかし、リンクされた答えでは、@ garnaat(botoの作者)はクエリ機能のボックスから利用可能になるべきだとアドバイスしました。 – Jonathan

関連する問題