如何使用 updateItem 仅更新 Dynamodb 中的一列值并创建包含其他列的新行?

问题描述 投票:0回答:1

我正在使用 python 和 boto3 从不同的源获取一些数据,并且只想更新 dynamodb 表中的一列。

但是,如果 Dynamodb 中不存在主键或行,我希望创建整行。

想知道我可能做错了什么?

我指定要更新的

UpdateExpression
的单列,并将其包含为
ExpressionAttributeNames
ExpressionAttributeValues
。如果我要更新 dynamo 中已存在的一行数据,这效果很好。

  ExpressionAttributeNames = {
    '#amount': 'amount',
  }
  
  ExpressionAttributeValues = {}

  for request in requests:
    ExpressionAttributeValues[f":{key}"] = val

    response = table.update_item(
      Key={ 'id': primaryKey },
      UpdateExpression= 'set #amount = :amount',
      ExpressionAttributeNames=ExpressionAttributeNames,
      ReturnValues= 'ALL_NEW',
      ExpressionAttributeValues=ExpressionAttributeValues
    )

如果该行不存在,则当附加行可以包含其他列(例如 {item、count、color 等})并且我需要这些附加数据列时,它只会创建

id
amount
列当 Dynamo 中不存在时创建。我能想到的唯一解决方案是让它成为一个条件,并使用conditionExpression仅在primaryKey存在时更新,然后根据响应,我们将决定是否有必要创建该行。我们需要有一个 diff ExpressionAttributeNames 和 ExpressionAttributeValues 来捕获行的所有列。这是正确的吗?

非常感谢这里的任何帮助!

amazon-web-services amazon-dynamodb boto3
1个回答
0
投票

您必须在更新项目(1 个请求)时设置所有值,或者对现有项目使用条件表达式。如果它不满足条件,则您将执行 PutItem 将所有值(2 个请求)。

© www.soinside.com 2019 - 2024. All rights reserved.