Alle Items aus DynamoDB in Python holen (boto3)

Eine ganze Tabelle in boto3 zu lesen heißt, einen scan bis zum Ende zu paginieren. Jede Antwort ist bei 1 MB gedeckelt, und der eingebaute Paginator des Low-Level-Clients folgt LastEvaluatedKey über alle Seiten für dich (wie DynamoDB-Cursor funktionieren).

Welche boto3-API du wählst, zählt hier mehr als die Paginierung — und der Paginator ist nur die halbe Begründung.

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

  • Paginatoren gehören zum Client, nicht zur Resourceboto3.resource("dynamodb").Table(…).scan hat überhaupt keinen Paginator, dort schreibst du die LastEvaluatedKey-Schleife also selbst. Schon das ist ein guter Grund, für einen vollständigen Read den Low-Level-Client zu nehmen.
  • Die Resource-API wandelt Zahlen in Decimal — ein gespeichertes {"N": "1994"} kommt als Decimal('1994') zurück, was json.dumps ohne eigenen Encoder nicht serialisieren will. Der Client oben gibt dir das rohe {"N": "1994"} und überlässt dir die Umwandlung (die Kodierung).
  • Stell den Paginator ein, statt ihn zu ersetzenpaginator.paginate(TableName="Music", PaginationConfig={"PageSize": 500, "MaxItems": 10000}). Boto3 definiert PageSize als "the number of items returned per page of each result" und MaxItems als Obergrenze für die Gesamtzahl, was ein NextToken erzeugt, mit dem du über StartingToken fortsetzt.
  • Parallel Scans brauchen einen Client pro Thread, sorgfältig gebautSegment und TotalSegments teilen die Arbeit auf, und boto3s eigene Empfehlung lautet, dass Clients thread-safe sind, Sessions und Resources aber nicht. Es warnt außerdem, dass "Invoking boto3.client() inside of a concurrent context may result in response ordering issues". Baue den Client, bevor du auffächerst, oder gib jedem Worker seine eigene boto3.session.Session() (wann sich parallel lohnt).
  • items wächst auf die Größe der Tabelle — verarbeite jede page innerhalb der Schleife, statt eine Liste zu füllen, die du behältst, es sei denn, du weißt bereits, dass die Tabelle klein ist.
  • Ein Scan berechnet jedes gelesene Byte, bei jedem LaufProjectionExpression verkleinert die Antwort, nicht die Rechnung (warum); eine FilterExpression verwirft Items, nachdem sie gelesen und berechnet wurden (Scan mit Filter). Auf einem heißen Pfad willst du eine Query.

Mach es visuell

Die Rechnung eines vollständigen Scans ist Item-Größe mal Item-Anzahl, aufgerundet in 4-KB-Einheiten. Der Item-Size-Rechner liefert dir aus einem eingefügten Item die Hälfte pro Item.

DynoTable blättert stattdessen in einem endlos scrollenden Grid durch eine Live-Tabelle, und sein SQL-Editor nennt dir die Operation, zu der deine Abfrage kompiliert, bevor du sie ausführst. Die RCU-Schätzung erscheint nur, wenn die Tabellen-Metadaten sie hergeben. DynoTable herunterladen.

Verwandte Beispiele

Referenzen

Zuletzt verifiziert am 2026-07-28 gegen die oben verlinkte offizielle AWS-Dokumentation.

Diesen Request visuell bauen

Stelle diese Operation im kostenlosen DynamoDB Query Builder zusammen — Key-Bedingung, Filter, Index, Limit, Sortierreihenfolge und eine Paginierungsschleife — und kopiere sie als lauffähiges SDK-v3-, CLI- oder boto3-Programm zurück.

DynamoDB Query Builder öffnen

Mit DynamoDB ohne die Console arbeiten

Ein schneller DynamoDB-Desktop-Client, der das echte SQL ausführt, das DynamoDB nicht kann — JOINs, GROUP BY, Aggregationen — mit visueller Bearbeitung und einem KI-Agenten auf deinen eigenen Bedrock-Schlüsseln.

30 Tage kostenlos testen, keine Kreditkarte — danach der Kostenlos-Tarif ohne Zeitlimit.