Escritura por lotes en DynamoDB en Python (boto3 batch_writer)

La forma idiomática de escribir items de DynamoDB en masa en Python es el gestor de contexto batch_writer() de boto3: almacena en búfer tus inserciones y eliminaciones, las envía como llamadas BatchWriteItem de hasta 25, y reenvía automáticamente los items no procesados — el bucle de reintento que cualquier otro lenguaje escribe 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")

Explicación

  • batch_writer() — según la documentación de boto3, el gestor "will automatically handle buffering and sending items in batches", y "will also automatically handle any unprocessed items and resend them as needed". Salir del bloque with vacía lo que aún quede en el búfer.
  • Valores simples de Python — esta es la API de recurso: sin DynamoDB JSON, los números como int/Decimal. Cada item de put_item debe incluir la clave primaria completa de la tabla; delete_item toma solo la clave.
  • Claves duplicadas — una llamada BatchWriteItem en bruto rechaza dos escrituras a la misma clave. Si tus datos de origen pueden repetir claves, construye el escritor como table.batch_writer(overwrite_by_pkeys=["Artist", "SongTitle"]) — deduplica el búfer, conservando la última escritura por clave.
  • Los mismos límites de servicio se aplican por debajo: 25 escrituras por solicitud, 400 KB por item, 16 MB por solicitud. batch_writer gestiona el troceo; no puede levantar el límite por item.
  • Sin actualizaciones, sin condicionesBatchWriteItem no puede expresar UpdateItem ni una ConditionExpression; una inserción sobre una clave existente reemplaza silenciosamente el item. ¿Necesitas todo o nada o escrituras condicionales? Usa TransactWriteItems.
  • ¿Vas por el cliente de bajo nivel en su lugar (client.batch_write_item)? Entonces UnprocessedItems es tuyo para drenar — itera con retroceso exponencial exactamente como el ejemplo de Node.js.

Hazlo visualmente

¿Comprobando tus items antes de una carga masiva? La calculadora de tamaño de item valida cada item contra el límite de 400 KB, y el DynamoDB Expression Builder copia código boto3 ejecutable para las lecturas y escrituras posteriores.

Para añadir, editar y eliminar items en masa en una interfaz gráfica — importación CSV/JSON incluida — descarga DynoTable.

Ejemplos relacionados

References

Verificado por última vez el 2026-07-13 contra la documentación oficial de AWS enlazada arriba.

Trabaja con DynamoDB sin la Consola

DynoTable es un cliente de escritorio rápido para DynamoDB: explora tablas, ejecuta consultas estilo SQL y edita Items localmente.