我正在尝试使用乐观锁定将某个项目的upsert实施到DynamoDB中。我的更新部分与ConditionExpression
一起使用以检查版本。但这会使保存部分失败,因为ConditionExpression
对于保存是错误的。是否可以编写ConditionExpression
以便处理两种情况?
我的代码:
result = copy.copy(user)
table = get_db_table()
current_version = result.get_version()
result.update_version()
try:
table.put_item(
Item=result.to_table_item(),
ConditionExpression=Attr(result.get_version_key()).eq(current_version)
)
except ClientError as error:
logger.error(
"Saving to db failed with '%s'",
str(error))
# Restore version
result.set_version(current_version)
raise Exception(ErrorCode.DB_SAVE) from error
return result
答案 0 :(得分:1)
基本上,您需要先确定该属性存在,然后才能对其进行比较。您的条件表达式字符串应为
does_not_exist(current_version) or current_version = expected_current_version
使用Boto3,您可以使用以下方法创建
Attr(result.get_version_key()).not_exists() | Attr(result.get_version_key().eq(current_version))