在本模块中,您将使用 UpdateItem API 来更新我们数据库中现有项目的属性。在本模块中,您将使用 UpdateItem API 来更新我们数据库中现有项目的属性。

完成模块所需时间:15 分钟


除写入和读取数据外,您还会经常需要更新数据库中的现有数据。如果能够通过一次调用完成对现有数据的更新,将要优于先读取项目然后再写回具有所提供更新的完整项目。DynamoDB 允许您通过 UpdateItem API 调用就地更新项目。

例如,假设每个项目都有一个 Formats 属性,这是书店中给定书名图书的所有不同装订样式图。随着时间推移,由于您增加了新的装订样式或停止提供某个装订样式,特定图书的此地图需要更新。


  • 更新项目

    在更新应用程序代码中的某个项目时,您需要重点关注四个元素:

    • 识别您要更新的项目的
    • 表达式属性名称,这是您要更新的属性的占位符。
    • 表达式属性值,这是您要更新的属性的值的占位符。
    • 更新表达式,它会使用表达式属性名称和表达式属性值来声明您需要的更新。

    假设您最近增加了 John Grisham 的 The Rainmaker 一书的有声版,并且您需要更新我们的 DynamoDB 表以反映这一变化。UpdateItem API 调用将与以下类似。

    # The UpdateItem API allows you to update a particular item as identified by its key.
    resp = table.update_item(
        Key={"Author": "John Grisham", "Title": "The Rainmaker"},
        # Expression attribute names specify placeholders for attribute names to use in your update expressions.
        ExpressionAttributeNames={
            "#formats": "Formats",
            "#audiobook": "Audiobook",
        },
        # Expression attribute values specify placeholders for attribute values to use in your update expressions.
        ExpressionAttributeValues={
            ":id": "8WE3KPTP",
        },
        # UpdateExpression declares the updates you want to perform on your item.
        # For more details about update expressions, see https://docs.aws.amazon.com/amazondynamodb/latest/developerguide/Expressions.UpdateExpressions.html
        UpdateExpression="SET #formats.#audiobook = :id",
    )

    您的 UpdateItem API 将包含这四个元素。首先,它会指定需要操作的项目的,其中 AuthorJohn GrishamTitleThe Rainmaker

    然后,您会指定您将在更新表达式中使用的表达式属性名称。您需要修改 Formats 属性,这是一个地图,因此您需要定义属性 (Formats) 和地图中键 (Audiobook) 的表达式属性名称。

    最后,您需要写入将在您 UpdateItem API 调用中执行的更新表达式。此更新表达式将使用之前定义的表达式属性名称和表达式属性值。您的 SET #formats.#audiobook = :id 表达式告诉 DynamoDB 将 Formats 属性的 Audiobook 键设置为 8WE3KPTP 的给定 ID 值。 

    第三,您将指定您要在表达式属性值中使用的值。在您的“Formats”地图中,装订样式的值为您库存系统中的货号,在此例中为 8WE3KPTP

    update_item.py 脚本执行了本模块前文的代码块中的 UpdateItem API 调用。为演示调用的差异,此脚本在执行更新调用前首先检索并打印了项目。然后再执行 UpdateItem API 调用。最后,此脚本再次检索并打印了项目以显示差异。

    您可以通过运行以下命令查看此脚本的具体操作。

    $ python update_item.py

    您应该能看到以下输出:

    Item before update:
    {'Title': 'The Rainmaker', 'Formats': {'Hardcover': 'J4SUKVGU', 'Paperback': 'D7YF4FCX'}, 'Author': 'John Grisham', 'Category': 'Suspense'}
    Item after update:
    {'Title': 'The Rainmaker', 'Formats': {'Audiobook': '8WE3KPTP', 'Hardcover': 'J4SUKVGU', 'Paperback': 'D7YF4FCX'}, 'Author': 'John Grisham', 'Category': 'Suspense'}

    您可以看到,应用更新后 The Rainmaker 拥有了新的 Audiobook 装订样式。


    在本模块中,您学习了如何通过 UpdateItem API 更新现有的项目。在下一模块中,您将学习如何清理您创建的资源以避免产生额外的费用。