【问题标题】:Dynamodb boto3 conditional updateDynamodb boto3 条件更新
【发布时间】:2020-08-15 14:32:32
【问题描述】:

我正在更新 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',
                )  

但我也想在更新中添加这个逻辑

我有属性“状态”,其值为 RETRY,并希望在尝试 > 10 次后将其更新为 EXPIRE。

所以我认为我需要 ExpressionAttributeValues 以具有条件逻辑。可以吗?

【问题讨论】:

    标签: amazon-dynamodb boto3


    【解决方案1】:

    您将无法在一次调用 update_item 时实现该类型的查询逻辑。

    可以做的是指定一个ConditionExpression,以防止您的attempt 字段增加超过10。

    table.update_item (
      // your update code 
      ConditionExpession = "#attempt <= 10"
    )
    

    否则,您可以利用来自更新调用的ReturnValues,它会告诉您attempt 属性的新值。如果attempt 的值等于10,您的应用程序可以有条件地发出另一个更新调用来设置status 字段。

    【讨论】:

      猜你喜欢
      • 2020-12-16
      • 1970-01-01
      • 2018-09-24
      • 1970-01-01
      • 2016-04-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-11-01
      相关资源
      最近更新 更多