이 모듈에서는 UpdateItem API를 사용하여 데이터베이스에서 기존 항목의 속성을 업데이트합니다. 이 모듈에서는 UpdateItem API를 사용하여 데이터베이스에서 기존 항목의 속성을 업데이트합니다.

모듈 소요 시간: 15분


데이터 읽기 및 쓰기 외에도, 주기적으로 데이터베이스에서 기존 데이터를 업데이트하려고 합니다. 단일 셀에서 이 데이터를 업데이트하는 것은 먼저 항목을 읽은 후 제공된 업데이트로 전체 항목을 다시 쓰는 것보다 더 좋은 방법입니다. DynamoDB에서는 UpdateItem API 호출을 사용하여 기존의 항목을 업데이트할 수 있습니다.

이 예제의 경우 각 항목에는 Formats 속성이 있으며, 이 속성은 서점에 있는 해당 제목의 모든 서로 다른 형식에 대한 맵입니다. 시간이 지나면 특정 서적에 대해 이 맵을 업데이트해야 합니다. 새 형식을 추가했거나 형식에 대한 지원을 중단할 수 있기 때문입니다.


  • 항목 업데이트

    애플리케이션 코드에서 항목을 업데이트하는 경우 다음 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가지 요소가 각각 있습니다. 첫 번째로, AuthorJohn Grisham을, TitleThe Rainmaker를 제공하여 작업하려는 항목의 Key를 지정합니다.

    두 번째로, 업데이트 식에 사용할 식 속성 이름을 지정합니다. 맵에 해당하는 Formats 속성을 수정하는 중이므로 속성(Formats)과 맵 내의 키(Audiobook) 모두에 대해 식 속성 이름을 정의해야 합니다.

    이제 UpdateItem API 호출에서 적용하려는 업데이트 식을 씁니다. 이 업데이트 식은 이전에 정의한 대로 식 속성 이름 및 식 속성 값 모두를 사용합니다. SET #formats.#audiobook = :id 식은 DynamoDB에 Formats 속성의 Audiobook 키를 제공된 ID 값, 8WE3KPTP로 설정하도록 합니다. 

    세 번째로, 식 속성 값에 사용할 값을 기술합니다. 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로 기존 항목을 업데이트하는 방법을 알아보았습니다. 다음 모듈에서는 추가 요금이 발생하지 않도록 생성한 리소스를 정리하는 방법에 대해 알아봅니다.