É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 bloc with vide 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 de put_item doit inclure la clé primaire complète de la table ; delete_item ne prend que la clé.
  • Clés en double — un appel BatchWriteItem brut rejette deux écritures sur la même clé. Si tes données source peuvent répéter des clés, construis le writer comme table.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_writer gère le découpage ; il ne peut pas lever le plafond par élément.
  • Pas de mises à jour, pas de conditionsBatchWriteItem ne peut pas exprimer UpdateItem ni une ConditionExpression ; 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) ? Alors UnprocessedItems est à 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

References

Dernière vérification le 2026-07-13 par rapport à la documentation officielle AWS liée ci-dessus.

Travaille avec DynamoDB sans la Console

DynoTable est un client de bureau rapide pour DynamoDB — parcours les tables, exécute des requêtes de style SQL et édite les items en local.