AWS の開始方法

非リレーショナルデータベースを作成および管理する

(Amazon DynamoDB を使用)

モジュール 4: 項目の更新

UpdateItem API を使用して、データベース内の既存の項目の属性を更新します。

概要

このモジュールでは、UpdateItem API を使用して、データベース内の既存の項目の属性を更新します

アプリケーションのユースケース

データの書き込みと読み込みに加えて、定期的にデータベースの既存データを更新できます。最初に項目を読み込み、次に一定の更新を行って全項目を書き込みし直すのではなく、単一の呼び出しでデータを更新できる最良の方法です。DynamoDB では UpdateItem API 呼び出しを使用して既存の項目を更新できます。

この例では、各項目にフォーマット属性があったことを思い出してください。これはブックストアが、あるタイトルに対して持っているさまざまなフォーマットのマップです。今後新しいフォーマットを追加したりフォーマットの取り扱いを中止したりするときに、特定の本のマップを更新する必要があります。

 所要時間

15 分

実装

  • 項目の更新

    アプリケーションコードで項目を更新する場合は、次の 4 つの要素に注目してください。

    • 更新する項目を識別するキー
    • 更新する属性のプレースホルダーである式属性名
    • 更新する属性値のプレースホルダーである式属性値
    • 式属性名と式属性値を使用して必要な更新を宣言する更新式。最近、オーディオブック形式の 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 コールには 4 つの各要素があります。まず、更新操作を行う項目の [Key] (キー) として [Author] (著者) に John Grisham、[Title] (タイトル) に The Rainmaker を指定します。

    次に、更新式で使用する式属性名を指定します。マップであるフォーマット属性を修正することになるため、属性 (フォーマット) とマップ内のキー (オーディオブック) の両方の式属性名を定義する必要があります。

    それから、UpdateItem API 呼び出しに適用する更新式を書き込みます。この更新式には、前に定義した式属性名と式属性値を使用します。SET #formats.#audiobook = :idの式は、[Formats] (フォーマット) 属性の [Audiobook] (オーディオブック) キーを、8WE3KPTP という指定 ID 値に設定するよう DynamoDB に指示します。 

    最後に、式属性値で使用する値を設定します。今回のフォーマットのマップでは、フォーマットの値は在庫システムの項目番号となります。この例では、値は 8WE3KPTP です。

    update_item.py スクリプトを実行すると、このモジュール内のコードブロックに先ほど登場した UpdateItem API 呼び出しが行われます。呼び出しによる違いを示すために、スクリプトでまず項目を取り出して出力してから、更新呼び出しを行います。次に UpdateItem API 呼び出しを行います。それから、スクリプトで 2 回目の項目の取得と出力を実行して違いを示します。

    スクリプトを実行する前に、数行追加する必要があります。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'}

    ご覧の通り、更新を適用した後に『レインメーカー』に新しいオーディオブックフォーマットが追加されました。

    このモジュールでは、UpdateItem API で既存の項目を更新する方法をご説明しました。 次のモジュールでは、作成したリソースをクリーンアップして追加料金を回避する方法をご説明します。

このモジュールはお役に立ちましたか?

ありがとうございます
このチュートリアルで良かった点をお聞かせください。
閉じる
ご期待に添えず申し訳ありません
古い説明、わかりにくい説明、間違った説明はございませんでしたか? このチュートリアルの改善のために、ぜひフィードバックをお寄せください。
閉じる

クリーンアップと次のステップ