Scrittura batch di DynamoDB in Python (boto3 batch_writer)
Il modo idiomatico di scrivere Item di DynamoDB in blocco in Python è il context manager batch_writer() di boto3: bufferizza i tuoi put e delete, li invia come chiamate BatchWriteItem di massimo 25, e reinvia automaticamente gli Item non elaborati — il ciclo di retry che ogni altro linguaggio scrive a mano.
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")Spiegazione
batch_writer()— secondo la documentazione di boto3, l'handle "will automatically handle buffering and sending items in batches" e "will also automatically handle any unprocessed items and resend them as needed". Uscire dal bloccowithesegue il flush di ciò che è ancora bufferizzato.- Valori Python semplici — questa è l'API resource: niente DynamoDB JSON, numeri come
int/Decimal. Ogni Item diput_itemdeve includere la chiave primaria completa della tabella;delete_itemprende solo la chiave. - Chiavi duplicate — una chiamata
BatchWriteItemgrezza rifiuta due scritture sulla stessa chiave. Se i tuoi dati di origine possono ripetere le chiavi, costruisci il writer cometable.batch_writer(overwrite_by_pkeys=["Artist", "SongTitle"])— deduplica il buffer, mantenendo l'ultima scrittura per chiave. - Si applicano gli stessi limiti di servizio sotto il cofano: 25 scritture per richiesta, 400 KB per Item, 16 MB per richiesta.
batch_writergestisce la suddivisione; non può eliminare il limite per singolo Item. - Niente aggiornamenti, niente condizioni —
BatchWriteItemnon può esprimereUpdateItemo unaConditionExpression; un put su una chiave esistente sostituisce silenziosamente l'Item. Ti servono scritture tutto-o-niente o condizionali? Usa TransactWriteItems. - Passi invece attraverso il client di basso livello (
client.batch_write_item)? AlloraUnprocessedItemssta a te svuotarlo — itera con backoff esponenziale esattamente come nell'esempio Node.js.
Fallo visivamente
Vuoi controllare i tuoi Item prima di un caricamento in blocco? Il calcolatore delle dimensioni degli Item convalida ogni Item rispetto al limite di 400 KB, e il DynamoDB Expression Builder copia codice boto3 eseguibile per le letture e scritture successive.
Per aggiungere, modificare ed eliminare Item in blocco in una GUI — import CSV/JSON incluso — scarica DynoTable.
Esempi correlati
- DynamoDB BatchWriteItem in Node.js — il ciclo di retry manuale che batch_writer nasconde.
- DynamoDB BatchWriteItem con la AWS CLI — la stessa scrittura batch dalla shell.
- DynamoDB PutItem in Python — la scrittura di un singolo Item che questo raggruppa in batch.
- Operazioni batch in DynamoDB — limiti, fallimenti parziali e quando conviene il batching.
- "Too many items requested for the BatchWriteItem call" — più di 25 richieste put/delete in un solo batch.
- "Provided list of item keys contains duplicates" — due richieste che toccano la stessa chiave in un solo batch.
References
- Amazon DynamoDB guide (batch_writer) — Boto3 documentation
- BatchWriteItem — Amazon DynamoDB API Reference
- Error handling with DynamoDB — Amazon DynamoDB Developer Guide
Ultima verifica 2026-07-13 rispetto alla documentazione ufficiale AWS collegata sopra.