2016-09-06 4 views
4

Wie kann ich alle Ergebnisse in einer DynamoDB-Abfrage durchlaufen, wenn sie mehr als eine Seite umfassen? This answer bedeutet, dass die Paginierung in die Abfragefunktion (zumindest in v2) gebaut wird, aber wenn ich versuche, diese in v3, scheinen meine Artikel beschränkt:Paging einer DynamoDB-Abfrage in boto3

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

Das sollte funktionieren. Versuchen Sie, die gesamte Tabelle zu scannen(), um sicherzustellen, dass Sie wirklich mehr Objekte erhalten sollen. – joarleymoraes

+0

Danke @joarleymoraes, aber ich habe genau das versucht und die Anzahl in der DynamoDB-Konsole ist etwa 10x was Boto3 zurückgibt. – Jonathan

+0

Ist list_id String oder Integer? Vielleicht willst du das überprüfen. – joarleymoraes

Antwort

1

ExclusiveStartKey der Name des Attributs ist, die Sie für suchen. Verwenden Sie den Wert, der für LastEvaluatedKey in der vorherigen Operation zurückgegeben wurde.

Der Datentyp für ExclusiveStartKey muss String, Number oder Binary sein. Keine festgelegten Datentypen sind zulässig.

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

+0

Wahrscheinlich hätte es klarer sein sollen - mir ist klar, dass ich mit 'ExclusiveStartKey' manuell paginieren kann. Aber in der verknüpften Antwort rät @garnaat (Autor von boto!), Dass es außerhalb der Box auf der Abfrage-Funktion verfügbar sein sollte. – Jonathan