Penulisan Batch DynamoDB di Python (boto3 batch_writer)

Cara idiomatik untuk menulis item DynamoDB secara massal di Python adalah context manager batch_writer() milik boto3: ia menyangga put dan delete Anda, mengirimnya sebagai panggilan BatchWriteItem hingga 25 item, dan otomatis mengirim ulang item yang belum diproses — loop retry yang di setiap bahasa lain ditulis dengan tangan.

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")

Penjelasan

  • batch_writer() — menurut dokumentasi boto3, handle-nya "will automatically handle buffering and sending items in batches", dan "will also automatically handle any unprocessed items and resend them as needed". Keluar dari blok with mengeluarkan (flush) apa pun yang masih tersangga.
  • Nilai Python biasa — ini adalah resource API: tanpa DynamoDB JSON, angka sebagai int/Decimal. Setiap item put_item harus menyertakan primary key lengkap tabel; delete_item hanya membutuhkan key.
  • Key duplikat — panggilan BatchWriteItem mentah menolak dua penulisan ke key yang sama. Jika data sumber Anda bisa mengulang key, konstruksi writer sebagai table.batch_writer(overwrite_by_pkeys=["Artist", "SongTitle"]) — ia menghilangkan duplikat di buffer, mempertahankan penulisan terakhir per key.
  • Batas layanan yang sama berlaku di baliknya: 25 penulisan per request, 400 KB per item, 16 MB per request. batch_writer menangani pemotongan (chunking); ia tidak bisa mengangkat batas per item.
  • Tanpa update, tanpa kondisiBatchWriteItem tidak bisa mengekspresikan UpdateItem atau sebuah ConditionExpression; sebuah put pada key yang sudah ada diam-diam menggantikan item. Butuh all-or-nothing atau penulisan bersyarat? Gunakan TransactWriteItems.
  • Menggunakan low-level client sebagai gantinya (client.batch_write_item)? Maka UnprocessedItems menjadi tugas Anda untuk dikuras — loop dengan exponential backoff persis seperti contoh Node.js.

Lakukan secara visual

Memeriksa item Anda sebelum bulk load? Kalkulator ukuran item memvalidasi setiap item terhadap batas 400 KB, dan DynamoDB Expression Builder menyalin kode boto3 yang bisa dijalankan untuk pembacaan dan penulisan lanjutan.

Untuk menambah, mengedit, dan menghapus item secara massal dalam GUI — impor CSV/JSON termasuk — unduh DynoTable.

Contoh terkait

References

Terakhir diverifikasi 2026-07-13 terhadap dokumentasi resmi AWS yang ditautkan di atas.

Bekerja dengan DynamoDB tanpa Console

DynoTable adalah klien desktop yang cepat untuk DynamoDB — jelajahi tabel, jalankan query gaya SQL, dan edit Item secara lokal.