Alle Items aus DynamoDB in Python holen (boto3)
Es gibt kein "select all" in DynamoDB — eine ganze Tabelle zu lesen bedeutet einen scan, den du bis zum Ende paginierst. Jede Antwort trägt höchstens 1 MB; boto3s eingebauter Scan-Paginator folgt LastEvaluatedKey über jede Seite hinweg für dich.
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")Erklärung
- Der Paginator ist der Punkt — ein einzelner
scan-Aufruf gibt NICHT die Tabelle zurück; er gibt bis zu 1 MB zurück.client.get_paginator("scan")stellt Folgeanfragen (speistLastEvaluatedKeyalsExclusiveStartKeyzurück), bis die Tabelle erschöpft ist — die Schleife, die man vergisst, wenn man sich fragt, warum Items "fehlen". (Von Hand? Rufe weiter auf, solange die Antwort einenLastEvaluatedKeyenthält.) - Speicher —
itemshält die gesamte Tabelle. Verarbeite bei großen Tabellen jedepageinnerhalb der Schleife (in eine Datei schreiben, streamen, aggregieren), statt anzusammeln. - Schneller bei großen Tabellen: Parallel Scan — übergib
Segment=i, TotalSegments=Nund führe N Worker (Threads/Prozesse) aus, jeder paginiert sein eigenes Segment. Gleiche Gesamtkosten, deutlich geringere Wanduhrzeit. - Kosten — ein vollständiger Scan liest (und berechnet) jedes Byte jedes Items, jedes Mal, wenn du ihn ausführst.
ProjectionExpressionverkleinert die Antwort, nicht die Rechnung; setze keinen Scan auf einen Hot Path — dafür sind query und Zugriffsmuster-Design da. - Items kommen in DynamoDB JSON zurück (
{"S": ...}). Lieber native Python-Typen? Nutze die Resource-API (table.scan+ eine manuelleLastEvaluatedKey-Schleife — die Resource-API hat keinen Paginator).
Visuell erledigen
Eine Tabelle zu überfliegen braucht kein Skript: Lade DynoTable herunter, um jede Tabelle in einem paginierten Raster zu durchsuchen — es blättert die Scans für dich durch, keine Schleife, die man falsch machen kann. Und bevor du scannst und zahlst, zeigt der DynamoDB-Preisrechner, was ein vollständiges Lesen deiner Tabelle tatsächlich kostet.
Verwandte Beispiele
- Alle Items in Node.js holen — dasselbe vollständige Lesen mit einer expliziten Schleife.
- Alle Items mit der AWS CLI holen — die CLI paginiert für dich.
- DynamoDB Scan in Python — Scannen mit einer
FilterExpression. - Parallel Scans — Segment/TotalSegments, Worker-Anzahl und wann es sich lohnt.
- Warum ist mein DynamoDB Scan langsam und teuer? — das Kostenmodell und wie man es vermeidet.
- DynamoDB ProvisionedThroughputExceededException — die ganze Tabelle zu lesen ist der klassische Weg, sie zu treffen.
- "The provided starting key is invalid" — ein verstümmelter Fortsetzungsschlüssel in der Pagination-Schleife.
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
Zuletzt verifiziert am 2026-07-13 gegen die oben verlinkte offizielle AWS-Dokumentation.