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 blocco with esegue il flush di ciò che è ancora bufferizzato.
  • Valori Python semplici — questa è l'API resource: niente DynamoDB JSON, numeri come int/Decimal. Ogni Item di put_item deve includere la chiave primaria completa della tabella; delete_item prende solo la chiave.
  • Chiavi duplicate — una chiamata BatchWriteItem grezza rifiuta due scritture sulla stessa chiave. Se i tuoi dati di origine possono ripetere le chiavi, costruisci il writer come table.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_writer gestisce la suddivisione; non può eliminare il limite per singolo Item.
  • Niente aggiornamenti, niente condizioniBatchWriteItem non può esprimere UpdateItem o una ConditionExpression; 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)? Allora UnprocessedItems sta 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

References

Ultima verifica 2026-07-13 rispetto alla documentazione ufficiale AWS collegata sopra.

Lavora con DynamoDB senza la Console

DynoTable è un client desktop veloce per DynamoDB — sfoglia le tabelle, esegui query in stile SQL e modifica gli Item localmente.