Ottenere tutti gli Item da DynamoDB in Python (boto3)
In DynamoDB non esiste un "select all" — leggere un'intera tabella significa uno scan che pagini fino alla fine. Ogni risposta trasporta al massimo 1 MB; il paginator di scan integrato di boto3 segue LastEvaluatedKey su ogni pagina per te.
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")Spiegazione
- Il paginator è il punto centrale — una singola chiamata
scanNON restituisce la tabella; restituisce fino a 1 MB.client.get_paginator("scan")invia richieste successive (reimmettendoLastEvaluatedKeycomeExclusiveStartKey) finché la tabella non è esaurita — il ciclo che si dimentica quando ci si chiede perché gli Item "mancano". (Lo fai a mano? Continua a chiamare finché la risposta contiene unLastEvaluatedKey.) - Memoria —
itemscontiene l'intera tabella. Per tabelle grandi, elabora ognipageall'interno del ciclo (scrivi su file, stream, aggrega) invece di accumulare. - Più veloce sulle tabelle grandi: scan parallelo — passa
Segment=i, TotalSegments=Ned esegui N worker (thread/processi), ciascuno che pagina il proprio segmento. Stesso costo totale, tempo reale molto inferiore. - Costo — uno scan completo legge (e fattura) ogni byte di ogni Item, ogni volta che lo esegui.
ProjectionExpressionriduce la risposta, non il costo; non mettere uno scan su un percorso critico — a questo servono query e la progettazione dei pattern di accesso. - Gli Item vengono restituiti in DynamoDB JSON (
{"S": ...}). Preferisci i tipi nativi di Python? Usa l'API resource (table.scan+ un ciclo manuale suLastEvaluatedKey— l'API resource non ha un paginator).
Fallo visivamente
Dare un'occhiata a una tabella non richiede uno script: scarica DynoTable per sfogliare qualsiasi tabella in una griglia paginata — pagina gli scan per te, senza cicli da sbagliare. E prima di fare scan-e-pagare, il calcolatore dei prezzi DynamoDB mostra quanto costa davvero una lettura completa della tua tabella.
Esempi correlati
- Ottenere tutti gli Item in Node.js — la stessa lettura completa con un ciclo esplicito.
- Ottenere tutti gli Item con la AWS CLI — la CLI pagina per te.
- DynamoDB Scan in Python — scansione con una
FilterExpression. - Scan paralleli — Segment/TotalSegments, numero di worker e quando vale la pena.
- Perché il mio DynamoDB Scan è lento e costoso? — il modello di costo e come evitarlo.
- DynamoDB ProvisionedThroughputExceededException — leggere l'intera tabella è il modo classico per incapparci.
- "The provided starting key is invalid" — una chiave di ripresa malformata nel ciclo di paginazione.
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
Ultima verifica 2026-07-13 rispetto alla documentazione ufficiale AWS collegata sopra.