【问题标题】:Using Boto3, get put_item to replace an object in DynamoDB if certain attributes exist on the object?如果对象上存在某些属性,则使用 Boto3 获取 put_item 以替换 DynamoDB 中的对象?
【发布时间】:2017-08-26 19:32:30
【问题描述】:

如果某些属性(其中一些是 DynamoDB 表的主键,而另一些不是)与我创建的新对象匹配,我在让 Boto3 的 put_item 替换 DynamoDB 中的对象时遇到问题'正在插入表格中。

例如,如果 DynamoDB 表中包含:

user (Partition Key) | ts (Sort Key) | height | weight
__________________________________________________________________________________

'fred'                  01-01-2017     5'10''   190
'george'                01-02-2017     5'08''   200

我正在尝试在此表中添加一个新行:

'fred'                 01-01-2018     5'10''    200

基于用户fred 和高度5'10'' 与表中已有的另一个用户匹配,我想用新条目替换旧条目。 boto3 和 AWS put_item 的文档有点不清楚——我该怎么做?

作为参考,这是我目前拥有的:

 tracking_result = tracking_dbs[drivetype].put_item(
      Item=track,
      # insert fields to remove old entry that matches
      # up with certain attributes from new entry here
  )

【问题讨论】:

    标签: python-3.x amazon-web-services amazon-dynamodb boto boto3


    【解决方案1】:

    仅当新条目的分区键和排序键与现有条目的分区键和排序键匹配时,DynamoDB 中已存在的条目才会被新条目替换。否则将创建一个新条目。

    在您的情况下,您必须删除现有条目(通过扫描而不是查询来获取现有条目,因为查询需要分区和排序键作为输入参数,然后执行删除操作),然后创建新条目。

    【讨论】:

    • 谢谢!有什么方法可以让我在不扫描的情况下做到这一点?如果可能,我想避免对数据库执行 O(n) 操作。
    • 您需要排序键吗?如果没有,并且您的表中没有太多数据,请删除该表并创建一个仅具有分区键(用户)且没有排序键的新表。然后 put_item 将按您的意愿工作。
    猜你喜欢
    • 2021-10-08
    • 1970-01-01
    • 1970-01-01
    • 2022-11-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-09-14
    相关资源
    最近更新 更多