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 bloquewithvací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 deput_itemdebe incluir la clave primaria completa de la tabla;delete_itemtoma solo la clave. - Claves duplicadas — una llamada
BatchWriteItemen bruto rechaza dos escrituras a la misma clave. Si tus datos de origen pueden repetir claves, construye el escritor comotable.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_writergestiona el troceo; no puede levantar el límite por item. - Sin actualizaciones, sin condiciones —
BatchWriteItemno puede expresarUpdateItemni unaConditionExpression; 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)? EntoncesUnprocessedItemses 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
- DynamoDB BatchWriteItem en Node.js — el bucle de reintento manual que batch_writer oculta.
- DynamoDB BatchWriteItem con la AWS CLI — la misma escritura por lotes desde el shell.
- DynamoDB PutItem en Python — la escritura de un único item que esto agrupa por lotes.
- Operaciones por lotes en DynamoDB — límites, fallo parcial y cuándo compensa el procesamiento por lotes.
- "Too many items requested for the BatchWriteItem call" — más de 25 solicitudes de inserción/eliminación en un lote.
- "Provided list of item keys contains duplicates" — dos solicitudes que tocan la misma clave en un lote.
References
- Amazon DynamoDB guide (batch_writer) — Boto3 documentation
- BatchWriteItem — Amazon DynamoDB API Reference
- Error handling with DynamoDB — Amazon DynamoDB Developer Guide
Verificado por última vez el 2026-07-13 contra la documentación oficial de AWS enlazada arriba.