![](/img/trans.png)
[英]Using DynamoDB transact_write_items how to do a ConditionCheck for an existing item and Put a new item if ConditionCheck is True?
[英]Using DynamoDB transact_write_items how to update multiple items of a table using Composite primary key?
我想根據主鍵和排序鍵的條件更新表中的多個項目。 是否可以使用 transact_write_items 來實現這一點? 我有一個表,主鍵為p_name
,排序鍵為a_id
。 如果a_id = a_id1
,我必須將a_status
更新為active ,否則對於a_id
的任何其他值,我需要將a_status
更新為inactive 。
response = dynamo_client.transact_write_items(
TransactItems=[
{
'Update': {
'TableName': 'table-1',
'Key': {
'p_name': {
'S': 'pName'
},
'a_id': {
'S': 'a_id1'
}
},
'ConditionExpression': 'a_id = :a_id',
'UpdateExpression': 'set a_status = :aStatus'
'ExpressionAttributeNames': {
':a_id': {'S': 'a_id1'},
':aStatus': {'S': 'active'}
}
},
'Update': {
'TableName': 'table-1',
'Key': {
'p_name': {
'S': 'pName'
},
'a_id': {
'S': 'a_id1'
}
},
'ConditionExpression': 'a_id <> :a_id',
'UpdateExpression': 'set a_status = :aStatus'
'ExpressionAttributeNames': {
':a_id': {'S': 'a_id1'},
':aStatus': {'S': 'inactive'}
}
}
}
]
)
這會引發以下錯誤:
An error occurred (ValidationException) when calling the TransactWriteItems operation: Transaction request cannot include multiple operations on one item
。
但是,由於我想在第二次更新調用中將所有沒有a_id
作為a_id1
的項目更新為非活動狀態,因此我無法查詢它以獲取特定的a_id
,因為我不知道還會存在哪些其他 id。
注意:所有a_id
值(排序鍵值)都以a_id
開頭,形式為a_id1
、 a_id2
、 a_id3
等。 有沒有辦法使用transact_write_items
來處理這個問題,我們可以單獨基於主鍵進行查詢? 或者,如果有一種方法我們可以在transact_write_items
中根據begins_with
過濾排序鍵
你應該把你的更新放在像這樣的單獨對象中:
response = dynamo_client.transact_write_items(
TransactItems=[
{
'Update': {
'TableName': 'table-1',
'Key': {
'p_name': {
'S': 'pName'
},
'a_id': {
'S': 'a_id1'
}
},
'ConditionExpression': 'a_id = :a_id',
'UpdateExpression': 'set a_status = :aStatus'
'ExpressionAttributeNames': {
':a_id': {'S': 'a_id1'},
':aStatus': {'S': 'active'}
}
}
},
{
'Update': {
'TableName': 'table-1',
'Key': {
'p_name': {
'S': 'pName'
},
'a_id': {
'S': 'a_id1'
}
},
'ConditionExpression': 'a_id <> :a_id',
'UpdateExpression': 'set a_status = :aStatus'
'ExpressionAttributeNames': {
':a_id': {'S': 'a_id1'},
':aStatus': {'S': 'inactive'}
}
}
}
])
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.