Python'da DynamoDB Toplu Yazma (boto3 batch_writer)

DynamoDB öğelerini Python'da toplu yazmanın deyimsel yolu, boto3'ün batch_writer() bağlam yöneticisidir: put ve delete'lerinizi ara belleğe alır, bunları 25'e kadar BatchWriteItem çağrıları olarak gönderir ve işlenmemiş öğeleri otomatik olarak yeniden gönderir — diğer her dilin elle yazdığı yeniden deneme döngüsü.

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

Açıklama

  • batch_writer() — boto3 belgelerine göre bu tanıtıcı, "ara belleğe alma ve öğeleri gruplar hâlinde gönderme işini otomatik olarak halleder" ve "ayrıca işlenmemiş öğeleri otomatik olarak halleder ve gerektiğinde yeniden gönderir". with bloğundan çıkmak, hâlâ ara bellekte olan her şeyi boşaltır.
  • Düz Python değerleri — bu, resource API'sidir: DynamoDB JSON yok, sayılar int/Decimal olarak. Her put_item öğesi tablonun tam birincil anahtarını içermelidir; delete_item yalnızca anahtarı alır.
  • Yinelenen anahtarlar — ham bir BatchWriteItem çağrısı, aynı anahtara yapılan iki yazmayı reddeder. Kaynak verileriniz anahtarları tekrarlayabiliyorsa, yazıcıyı table.batch_writer(overwrite_by_pkeys=["Artist", "SongTitle"]) olarak oluşturun — ara belleği yinelenenlerden arındırır ve anahtar başına son yazmayı tutar.
  • Altta aynı hizmet sınırları geçerlidir: istek başına 25 yazma, öğe başına 400 KB, istek başına 16 MB. batch_writer parçalamayı halleder; öğe başına üst sınırı kaldıramaz.
  • Güncelleme yok, koşul yokBatchWriteItem, UpdateItem veya bir ConditionExpression ifade edemez; mevcut bir anahtara yapılan bir put, öğenin sessizce yerine geçer. Ya hep ya hiç veya koşullu yazmalara mı ihtiyacınız var? TransactWriteItems'ı kullanın.
  • Bunun yerine düşük seviyeli istemci (client.batch_write_item) üzerinden mi gidiyorsunuz? O zaman UnprocessedItems'ı boşaltmak size kalmıştır — tam olarak Node.js örneğindeki gibi üstel geri çekilmeyle döngü yapın.

Görsel olarak yapın

Toplu bir yüklemeden önce öğelerinizi mi kontrol ediyorsunuz? Öğe boyutu hesaplayıcı, her öğeyi 400 KB üst sınırına karşı doğrular ve DynamoDB Expression Builder, takip eden okuma ve yazmalar için çalıştırılabilir boto3 kodunu kopyalar.

Öğeleri bir grafik arayüzde (GUI) toplu eklemek, düzenlemek ve silmek için — CSV/JSON içe aktarma dahil — DynoTable'ı indirin.

İlgili örnekler

References

En son 2026-07-13 tarihinde yukarıda bağlantısı verilen resmi AWS belgelerine karşı doğrulandı.

Console olmadan DynamoDB ile çalışın

DynoTable, DynamoDB için hızlı bir masaüstü istemcisidir — tablolara göz atın, SQL tarzı sorgular çalıştırın ve item'ları yerel olarak düzenleyin.