Dynamodb boto3 条件更新
Dynamodb boto3 conditional update
我正在更新 dynamodb 中的一个计数器,它工作正常,但我还想根据该值进行额外的更新。
response=table.update_item(
Key={
"record_key":record_key_val,
"record_type":f"REPROC|{assignment_id}"
},
UpdateExpression="""
SET #attempt = #attempt + :val,
#last_status_code = :last_status_code
""",
ExpressionAttributeNames={
"#attempt": "attempt",
"#last_status_code" : "last_status_code"
},
ExpressionAttributeValues={
":val": 1,
":last_status_code": last_status_code
},
ReturnValues='UPDATED_NEW',
)
但是我也想在更新中添加这个逻辑
我的属性“status”的值为 RETRY,并希望在尝试 > 10 次后将其更新为 EXPIRE。
所以我认为我需要的是具有条件逻辑的 ExpressionAttributeValues。可以吗?
您将无法在对 update_item
的单个调用中实现该类型的查询逻辑。
您可以做的是指定一个 ConditionExpression 来防止您的 attempt
字段递增超过 10。
table.update_item (
// your update code
ConditionExpession = "#attempt <= 10"
)
否则,您可以利用来自更新调用的 ReturnValues
,它会告诉您 attempt
属性的新值。如果 attempt
的值等于 10,您的应用程序可以有条件地发出另一个更新调用来设置 status
字段。
我正在更新 dynamodb 中的一个计数器,它工作正常,但我还想根据该值进行额外的更新。
response=table.update_item(
Key={
"record_key":record_key_val,
"record_type":f"REPROC|{assignment_id}"
},
UpdateExpression="""
SET #attempt = #attempt + :val,
#last_status_code = :last_status_code
""",
ExpressionAttributeNames={
"#attempt": "attempt",
"#last_status_code" : "last_status_code"
},
ExpressionAttributeValues={
":val": 1,
":last_status_code": last_status_code
},
ReturnValues='UPDATED_NEW',
)
但是我也想在更新中添加这个逻辑
我的属性“status”的值为 RETRY,并希望在尝试 > 10 次后将其更新为 EXPIRE。
所以我认为我需要的是具有条件逻辑的 ExpressionAttributeValues。可以吗?
您将无法在对 update_item
的单个调用中实现该类型的查询逻辑。
您可以做的是指定一个 ConditionExpression 来防止您的 attempt
字段递增超过 10。
table.update_item (
// your update code
ConditionExpession = "#attempt <= 10"
)
否则,您可以利用来自更新调用的 ReturnValues
,它会告诉您 attempt
属性的新值。如果 attempt
的值等于 10,您的应用程序可以有条件地发出另一个更新调用来设置 status
字段。