事务请求不能包括对一个项目python的多个操作



在使用transact_write_item时,我面临以下错误:

调用TransactWriteItems操作时发生错误(ValidationException(:事务请求不能包括对一个项目的多个操作

以下是我的代码:

dynamodb.transact_write_items(
TransactItems=[
{
"Update":{
"Key":{
"id":{
"S":"8177-4cb6ca9ede00"
}
},
"TableName":"user",
"UpdateExpression":"SET #updated_at = :updated_at",
"ExpressionAttributeNames":{
"#updated_at":"updated_at"
},
"ExpressionAttributeValues":{
":updated_at":{
"N":"1607588602447"
}
},
"ConditionExpression":"attribute_exists(id)"
}
},
{
"Delete":{
"Key":{
"key":{
"S":"00e4d492d86284ebf48a"
}
},
"TableName":"user_name",
"ConditionExpression":"#i = :i",
"ExpressionAttributeNames":{
"#i":"name"
},
"ExpressionAttributeValues":{
":i":{
"S":"00e4d492d86284ebf48a"
}
}
}
},
{
"Put":{
"Item":{
"name":{
"S":"700e4d492d86284ebf48a"
}
},
"TableName":"user_name",
"ConditionExpression":"#i <> :i",
"ExpressionAttributeNames":{
"#i":"name"
},
"ExpressionAttributeValues":{
":i":{
"S":"700e4d492d86284ebf48a"
}
}
}
}
]
)

我错过了什么?但是,如果我只执行一个操作,它就会起作用。

当它们指向同一项时,它们使用不同的独占条件。(带着同样的问题来到这里,但没有解决方案(

删除

"ConditionExpression":"#i = :i",

放入

"ConditionExpression":"#i <> :i",

所以我认为这是一个bug,因为在检查键的唯一性之前应该检查条件。(结果将是只需要执行其中一个项目(。

TransactItems中的最后两个操作(Put&Delete(指向同一对象:

"Item": {
"name":{
"S":"700e4d492d86284ebf48a"
}
},

最新更新