Python'da DynamoDB TransactWriteItems (boto3)
transact_write_items, 100'e kadar yazmayı tek bir ya hep ya hiç işleminde gruplar — ya her eylem işlenir ya da hiçbiri işlenmez. boto3 düşük seviyeli istemcisiyle, her biri isteğe bağlı bir koşula sahip Put, Update, Delete ve ConditionCheck eylemlerini karıştıran bir TransactItems listesi geçirirsiniz.
Code
import boto3
client = boto3.client("dynamodb")
# Move one award between two songs — atomically. If the first song has no
# award to give, NEITHER update happens.
try:
client.transact_write_items(
TransactItems=[
{
"Update": {
"TableName": "Music",
"Key": {"Artist": {"S": "Arturo Sandoval"}, "SongTitle": {"S": "Cubano Chant"}},
"UpdateExpression": "SET #upd0 = #upd0 - :one",
"ConditionExpression": "#upd0 >= :one",
"ExpressionAttributeNames": {"#upd0": "Awards"},
"ExpressionAttributeValues": {":one": {"N": "1"}},
}
},
{
"Update": {
"TableName": "Music",
"Key": {"Artist": {"S": "Arturo Sandoval"}, "SongTitle": {"S": "A Mis Abuelos"}},
"UpdateExpression": "SET #upd0 = if_not_exists(#upd0, :zero) + :one",
"ExpressionAttributeNames": {"#upd0": "Awards"},
"ExpressionAttributeValues": {":one": {"N": "1"}, ":zero": {"N": "0"}},
}
},
]
)
print("Transaction committed")
except client.exceptions.TransactionCanceledException as e:
# One reason per action, in TransactItems order. Code "None" means that
# action was fine — some OTHER action sank the transaction.
codes = [reason["Code"] for reason in e.response["CancellationReasons"]]
print(f"Transaction canceled: {codes}") # e.g. ['ConditionalCheckFailed', 'None']Açıklama
TransactItems— en fazla 100Put/Update/Delete/ConditionCheckeylemi, toplamda 4 MB, DynamoDB JSON'daki değerler. Eylemler tablolara yayılabilir (aynı hesap + Bölge), ancak hiçbir iki eylem aynı öğeyi hedefleyemez — bu tek başına işlemi iptal eder.ConditionCheck— işlemin değiştirmediği bir öğe üzerinde bir koşul öne sürer (örneğin "hesap hâlâ mevcut") ve başarısız olursa işlemin tamamını veto eder.TransactionCanceledException— ele alınacak tek hata.e.response["CancellationReasons"], sırayla eylem başına bir{"Code", "Message"}listeler — kodlarConditionalCheckFailed,TransactionConflict(başka bir işlem ilerleme sırasında bir öğeye dokundu — geri çekilmeyle yeniden denemek güvenli),ProvisionedThroughputExceededveValidationErroriçerir;None, masum eylemleri işaretler. Kaybeden öğenin özniteliklerini nedeninde almak için bir eyleme"ReturnValuesOnConditionCheckFailure": "ALL_OLD"ayarlayın.ClientRequestToken— çağrıyı 10 dakika boyunca idempotent yapmak için bir tane geçirin; bir ağ zaman aşımından sonra botocore'un bir yeniden denemesi böylece yazmaları iki kez uygulayamaz.- Maliyet — işlemsel yazmalar, öğe başına iki altta yatan yazma tüketir (hazırla + işle), bu nedenle düz bir yazmanın kabaca 2× WCU'sunu faturalandırır. Tek öğeli bir koşullu yazma zaten size bir öğede atomiklik veriyorsa işlemlere başvurmayın.
Görsel olarak yapın
Her eylemin içindeki koşul ve güncelleme ifadeleri zahmetli kısımdır — DynamoDB Expression Builder bunları ad/değer eşlemeleriyle bir araya getirir ve çalıştırılabilir boto3 kodunu kopyalar.
Öğeleri düzenlemek ve üretilen ifadeleri bir grafik arayüzde (GUI) gözden geçirmek için — DynoTable'ı indirin.
İlgili örnekler
- Node.js'te DynamoDB TransactWriteItems — AWS SDK v3 ile aynı işlem.
- AWS CLI ile DynamoDB TransactWriteItems — kabuktan aynı işlem.
- Python'da DynamoDB koşullu yazma — 2× maliyeti olmadan tek öğe atomikliği.
- DynamoDB işlemleri — yalıtım, idempotentlik ve işlemlerin ne zaman buna değdiği.
- DynamoDB TransactionCanceledException — çözümlenmiş her iptal-nedeni kodu.
- "Too many actions in a TransactWriteItems call" — 100-eylem ve 4 MB işlem sınırları.
- "Transaction request cannot include multiple operations on one item" — işlem başına öğe başına bir eylem.
References
- TransactWriteItems — Amazon DynamoDB API Reference
- DynamoDB.Client.transact_write_items — Boto3 documentation
- Amazon DynamoDB transactions: how it works — Amazon DynamoDB Developer Guide
- DynamoDB read and write operations (capacity unit consumption) — Amazon DynamoDB Developer Guide
En son 2026-07-13 tarihinde yukarıda bağlantısı verilen resmi AWS belgelerine karşı doğrulandı.