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 deswith-Blocks leert alles, was noch gepuffert ist.- Einfache Python-Werte — dies ist die Resource-API: kein DynamoDB JSON, Zahlen als
int/Decimal. Jedesput_item-Item muss den vollständigen Primärschlüssel der Tabelle enthalten;delete_itemnimmt 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 alstable.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 Bedingungen —
BatchWriteItemkann keinUpdateItemund keineConditionExpressionausdrü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 duUnprocessedItemsselbst 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
- DynamoDB BatchWriteItem in Node.js — die manuelle Retry-Schleife, die batch_writer verbirgt.
- DynamoDB BatchWriteItem mit der AWS CLI — derselbe Batch-Write aus der Shell.
- DynamoDB PutItem in Python — der Einzel-Item-Write, den dies bündelt.
- Batch-Operationen in DynamoDB — Limits, Teilfehler und wann sich Batching lohnt.
- "Too many items requested for the BatchWriteItem call" — mehr als 25 Put/Delete-Anfragen in einem Batch.
- "Provided list of item keys contains duplicates" — zwei Anfragen, die denselben Schlüssel in einem Batch berühren.
References
- Amazon DynamoDB guide (batch_writer) — Boto3 documentation
- BatchWriteItem — Amazon DynamoDB API Reference
- Error handling with DynamoDB — Amazon DynamoDB Developer Guide
Zuletzt verifiziert am 2026-07-13 gegen die oben verlinkte offizielle AWS-Dokumentation.