Obtener todos los items de DynamoDB en Python (boto3)
En DynamoDB no existe un "select all" — leer una tabla entera significa un scan que paginas hasta el final. Cada respuesta lleva como máximo 1 MB; el paginador de scan integrado de boto3 sigue LastEvaluatedKey por ti a través de cada página.
Code
import boto3
client = boto3.client("dynamodb")
paginator = client.get_paginator("scan")
items = []
for page in paginator.paginate(TableName="Music"):
items.extend(page["Items"])
print(f"Table holds {len(items)} items")Explicación
- El paginador es lo importante — una única llamada a
scanNO devuelve la tabla; devuelve hasta 1 MB.client.get_paginator("scan")emite solicitudes de seguimiento (volviendo a alimentarLastEvaluatedKeycomoExclusiveStartKey) hasta agotar la tabla — el bucle que la gente olvida cuando se pregunta por qué "faltan" items. (¿Hacerlo a mano? Sigue llamando mientras la respuesta contenga unLastEvaluatedKey.) - Memoria —
itemscontiene la tabla entera. Para tablas grandes, procesa cadapagedentro del bucle (escribir a un archivo, hacer streaming, agregar) en lugar de acumular. - Más rápido en tablas grandes: scan en paralelo — pasa
Segment=i, TotalSegments=Ny ejecuta N workers (hilos/procesos), cada uno paginando su propio segmento. El mismo coste total, mucho menos tiempo de reloj. - Coste — un scan completo lee (y factura) cada byte de cada item, cada vez que lo ejecutas.
ProjectionExpressionreduce la respuesta, no la factura; no pongas un scan en una ruta caliente — para eso están query y el diseño de patrones de acceso. - Los items vuelven en DynamoDB JSON (
{"S": ...}). ¿Prefieres tipos nativos de Python? Usa la API de recurso (table.scan+ un bucle manual deLastEvaluatedKey— la API de recurso no tiene paginador).
Hazlo visualmente
Echar un vistazo a una tabla no necesita un script: descarga DynoTable para explorar cualquier tabla en una cuadrícula paginada — pagina los scans por ti, sin un bucle que equivocar. Y antes de escanear y pagar, la calculadora de precios de DynamoDB muestra lo que realmente cuesta una lectura completa de tu tabla.
Ejemplos relacionados
- Obtener todos los items en Node.js — la misma lectura completa con un bucle explícito.
- Obtener todos los items con la AWS CLI — la CLI pagina por ti.
- DynamoDB Scan en Python — escanear con un
FilterExpression. - Scans en paralelo — Segment/TotalSegments, número de workers y cuándo vale la pena.
- ¿Por qué mi DynamoDB Scan es lento y caro? — el modelo de costes y cómo evitarlo.
- DynamoDB ProvisionedThroughputExceededException — leer la tabla entera es la forma clásica de provocarlo.
- "The provided starting key is invalid" — una clave de reanudación deformada en el bucle de paginación.
References
- Scan — Amazon DynamoDB API Reference
- DynamoDB.Paginator.Scan — Boto3 documentation
- Scanning tables in DynamoDB — Amazon DynamoDB Developer Guide
- DynamoDB read and write operations (capacity unit consumption) — Amazon DynamoDB Developer Guide
Verificado por última vez el 2026-07-13 contra la documentación oficial de AWS enlazada arriba.