AWS 入門

建立和管理非關聯式資料庫

使用 Amazon DynamoDB

單元 4:更新項目

您將使用 UpdateItem API 更新資料庫中現有項目的屬性。

概觀

在本單元,您使用 UpdateItem API 更新資料庫中現有項目的屬性

應用程式使用案例

除了寫入和讀取資料,您經常想要更新資料庫中的現有資料。最佳方式是您能在單一呼叫中更新資料,而非先讀取項目,然後使用我們提供的更新寫回完整項目。DynamoDB 可讓您使用 UpdateItem API 呼叫就地更新項目。

對於此範例,請記住,每個項目都有 Formats 屬性,該屬性會對應您的書店針對給定標題指定的所有不同格式。隨著時間的推移,由於您新增新格式或停止攜帶某個格式,因此需要針對特定的書籍更新此對應。

 完成時間

15 分鐘

實作

  • 更新應用程式程式碼中的項目時,需著重四個元素:

    • 索引鍵,識別您要更新的項目。
    • 表達式屬性名稱,是您要更新之屬性的預留位置。
    • 表達式屬性值,是您要更新其屬性的值的預留位置。
    • 更新表達式會使用表達式屬性名稱和表達式屬性值來宣告您要的更新。假設您最近已經為 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 呼叫具有四個元素。首先,透過指定作者 John Grisham 和標題 The Rainmaker,來指定要操作項目的索引鍵

    其次,您指定要在更新運算式中使用的表達式屬性名稱。您修改 Formats 屬性,其為一種對應,因此,您需要在對應內針對屬性 (Formats) 和索引鍵 (Audiobook) 定義運算式屬性名稱。

    最後,您撰寫要在 UpdateItem API 呼叫中套用的更新運算式。此更新運算式使用先前定義的運算式屬性名稱和表達式屬性值。您的 SET #formats.#audiobook = :id 表達式告知 DynamoDB 將 Formats 屬性的 Audiobook 索引鍵設定為 8WE3KPTP 的 ID 值。 

    第三,您說明要在表達式屬性值中使用的值。在 Formats 對應中,某個格式的值為庫存系統中的項目編號。在此範例中,值為 8WE3KPTP

    update_item.py 指令碼讓 UpdateItem API 呼叫顯示在單元前面的程式碼區塊中。為顯示呼叫的差異,指令碼會先擷取並列印項目,然後再執行更新呼叫。然後,進行 UpdateItem API 呼叫。最後,指令碼再次擷取並列印項目以顯示差異。

    在執行指令碼之前,您需要新增幾行。透過 Cloud9 開啟 update_item.py,然後在指令碼頂端貼上以下 3 行:

    import boto3
    dynamodb = boto3.resource('dynamodb', region_name='us-east-1')
    table = dynamodb.Table('Books')

    接下來,執行以下命令:

    $ 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 更新現有項目。 在下一個單元,您將學習如何清理所建立的資源,以避免額外收費。

這個單元對您是否有幫助?

清除和後續步驟