Paginación en Amazon DynamoDB utilizando Boto

¿Cómo puedo paginar mis resultados de DynamoDB usando la biblioteca de Boto python? A partir de la documentación de la API de Boto, no puedo averiguar si es compatible con la paginación, aunque la API de DynamoDB sí la admite.

Boto tiene soporte para el comportamiento de “paginación” utilizando una combinación de “ExclusiveStartKey” y “Limit”. Por ejemplo, para paginar Scan .

Aquí hay un ejemplo que debería analizar una tabla entera por trozos de 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() 

EDITAR:

Como lo señaló @garnaat, es posible que haya malinterpretado tu objective real. La sugerencia anterior le permite proporcionar paginación como SO, por ejemplo, para preguntas. No más de 15 por páginas.

Si solo necesitas una forma de cargar todo el conjunto de resultados producido por un Scan dado, Boto es una gran biblioteca y ya resume esto para ti sin necesidad de magia negra como en mi respuesta. En este caso, debes seguir lo que él (@garnaat) aconseja. Por cierto, él es el autor de Boto y, como tal, una gran referencia para las preguntas relacionadas con Boto 🙂

Tal vez no entiendo la pregunta, pero creo que lo estás haciendo más difícil de lo que es necesario. Si está utilizando la interfaz DynamoDB layer2 en boto (el valor predeterminado), se encarga de la paginación.

Por lo tanto, si desea realizar una operación de consulta, simplemente haga esto:

 import boto c = boto.connect_dynamodb() t = c.get_table('mytable') for item in t.query(hash_key='foo'): print item 

Esto manejará automáticamente la paginación de los resultados de DynamoDB. Lo mismo también funcionaría para una solicitud de escaneo.

hay una buena posibilidad de que quieras algo como esto:

 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 

Por supuesto, este es un ejemplo tonto para la demostración.
La clave aquí es usar last_evaluated_key no el exclusive_start_key