DynamoDB Batch-Write in Python (boto3 batch_writer)

Der idiomatische Weg, DynamoDB-Items in Python in großen Mengen zu schreiben, ist boto3s batch_writer()-Kontextmanager: Er puffert deine Puts und Deletes, sendet sie als BatchWriteItem-Aufrufe von bis zu 25 und sendet unverarbeitete Items automatisch erneut — die Retry-Schleife, die jede andere Sprache von Hand schreibt.

Code

import boto3

dynamodb = boto3.resource("dynamodb")
table = dynamodb.Table("Music")

songs = [
    {"Artist": "Arturo Sandoval", "SongTitle": "Cubano Chant", "AlbumTitle": "Danzon", "Year": 1994},
    {"Artist": "Arturo Sandoval", "SongTitle": "A Mis Abuelos", "AlbumTitle": "Danzon", "Year": 1994},
    {"Artist": "Arturo Sandoval", "SongTitle": "Groovin' High", "AlbumTitle": "Swingin'", "Year": 1996},
]

with table.batch_writer() as batch:
    for song in songs:
        batch.put_item(Item=song)
    batch.delete_item(Key={"Artist": "Ella Fitzgerald", "SongTitle": "Misty"})

print(f"Wrote {len(songs)} songs")

Erklärung

  • batch_writer() — laut boto3-Doku wird der Handle "automatically handle buffering and sending items in batches" und "will also automatically handle any unprocessed items and resend them as needed". Das Verlassen des with-Blocks leert alles, was noch gepuffert ist.
  • Einfache Python-Werte — dies ist die Resource-API: kein DynamoDB JSON, Zahlen als int/Decimal. Jedes put_item-Item muss den vollständigen Primärschlüssel der Tabelle enthalten; delete_item nimmt nur den Schlüssel.
  • Doppelte Schlüssel — ein roher BatchWriteItem-Aufruf lehnt zwei Schreibvorgänge auf denselben Schlüssel ab. Können deine Quelldaten Schlüssel wiederholen, konstruiere den Writer als table.batch_writer(overwrite_by_pkeys=["Artist", "SongTitle"]) — er dedupliziert den Puffer und behält den letzten Schreibvorgang pro Schlüssel.
  • Dieselben Service-Limits gelten darunter: 25 Schreibvorgänge pro Anfrage, 400 KB pro Item, 16 MB pro Anfrage. batch_writer übernimmt das Aufteilen; es kann die Grenze pro Item nicht aufheben.
  • Keine Updates, keine BedingungenBatchWriteItem kann kein UpdateItem und keine ConditionExpression ausdrücken; ein Put auf einen existierenden Schlüssel ersetzt stillschweigend das Item. Brauchst du Alles-oder-nichts oder bedingte Schreibvorgänge? Nutze TransactWriteItems.
  • Gehst du stattdessen über den Low-Level-Client (client.batch_write_item)? Dann musst du UnprocessedItems selbst leeren — schleife mit exponentiellem Backoff genau wie im Node.js-Beispiel.

Visuell erledigen

Prüfst du deine Items vor einem Massenimport? Der Item-Size-Rechner validiert jedes Item gegen die 400-KB-Grenze, und der DynamoDB Expression Builder kopiert lauffähigen boto3-Code für die anschließenden Reads und Writes.

Um Items in großen Mengen in einer GUI hinzuzufügen, zu bearbeiten und zu löschen — CSV-/JSON-Import inklusive — lade DynoTable herunter.

Verwandte Beispiele

References

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

Mit DynamoDB ohne die Console arbeiten

DynoTable ist ein schneller Desktop-Client für DynamoDB — durchsuche Tabellen, führe SQL-artige Queries aus und bearbeite Items lokal.