Écriture par lot DynamoDB en Python (boto3 batch_writer)
La façon idiomatique d'écrire des éléments DynamoDB en masse en Python est le gestionnaire de contexte batch_writer() de boto3 : il met en tampon tes insertions et suppressions, les envoie sous forme d'appels BatchWriteItem de jusqu'à 25, et renvoie automatiquement les éléments non traités — la boucle de relance que tous les autres langages écrivent à la main.
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")Explication
batch_writer()— selon la documentation boto3, le gestionnaire « will automatically handle buffering and sending items in batches », et « will also automatically handle any unprocessed items and resend them as needed ». Quitter le blocwithvide tout ce qui reste en tampon.- Valeurs Python simples — c'est l'API resource : pas de DynamoDB JSON, des nombres en
int/Decimal. Chaque élément deput_itemdoit inclure la clé primaire complète de la table ;delete_itemne prend que la clé. - Clés en double — un appel
BatchWriteItembrut rejette deux écritures sur la même clé. Si tes données source peuvent répéter des clés, construis le writer commetable.batch_writer(overwrite_by_pkeys=["Artist", "SongTitle"])— il déduplique le tampon, en gardant la dernière écriture par clé. - Les mêmes limites de service s'appliquent en dessous : 25 écritures par requête, 400 Ko par élément, 16 Mo par requête.
batch_writergère le découpage ; il ne peut pas lever le plafond par élément. - Pas de mises à jour, pas de conditions —
BatchWriteItemne peut pas exprimerUpdateItemni uneConditionExpression; une insertion sur une clé existante remplace silencieusement l'élément. Besoin de tout-ou-rien ou d'écritures conditionnelles ? Utilise TransactWriteItems. - Tu passes plutôt par le client bas niveau (
client.batch_write_item) ? AlorsUnprocessedItemsest à toi de vider — boucle avec un backoff exponentiel exactement comme dans l'exemple Node.js.
À faire visuellement
Tu vérifies tes éléments avant un chargement en masse ? Le calculateur de taille d'élément valide chaque élément par rapport au plafond de 400 Ko, et le DynamoDB Expression Builder copie du code boto3 exécutable pour les lectures et écritures qui suivent.
Pour ajouter, éditer et supprimer des éléments en masse dans une interface graphique — import CSV/JSON inclus — télécharge DynoTable.
Exemples liés
- DynamoDB BatchWriteItem en Node.js — la boucle de relance manuelle que batch_writer cache.
- DynamoDB BatchWriteItem avec l'AWS CLI — la même écriture par lot depuis le shell.
- DynamoDB PutItem en Python — l'écriture d'un seul élément que ceci regroupe en lot.
- Opérations par lot dans DynamoDB — limites, échec partiel, et quand le regroupement en lot est payant.
- "Too many items requested for the BatchWriteItem call" — plus de 25 requêtes d'insertion/suppression dans un seul lot.
- "Provided list of item keys contains duplicates" — deux requêtes touchant la même clé dans un seul lot.
References
- Amazon DynamoDB guide (batch_writer) — Boto3 documentation
- BatchWriteItem — Amazon DynamoDB API Reference
- Error handling with DynamoDB — Amazon DynamoDB Developer Guide
Dernière vérification le 2026-07-13 par rapport à la documentation officielle AWS liée ci-dessus.