Trong mô-đun này, bạn sử dụng APIUpdateItem để cập nhật các thuộc tính của mục hiện tại trong cơ sở dữ liệu của chúng tôi. Trong mô-đun này, bạn sử dụng APIUpdateItem để cập nhật các thuộc tính của mục hiện tại trong cơ sở dữ liệu của chúng tôi.

Thời gian hoàn thành mô-đun: 15 phút


Ngoài việc ghi và đọc dữ liệu, bạn thường xuyên muốn cập nhật dữ liệu hiện tại trong cơ sở dữ liệu. Tốt nhất nếu bạn có thể cập nhật dữ liệu này trong một cuộc gọi thay vì trước tiên đọc một mục và sau đó ghi lại toàn bộ mục với các cập nhật nhất định của chúng tôi. DynamoDB cho phép bạn cập nhật các mục hiện có bằng cách sử dụng lệnh gọi API UpdateItem.

Với ví dụ này, hãy nhớ rằng mỗi mục có một thuộc tính Định dạng , là bản đồ của tất cả các định dạng khác nhau mà hiệu sách của bạn có cho một tiêu đề nhất định. Theo thời gian, bản đồ này cần được cập nhật cho một cuốn sách cụ thể vì bạn đã thêm định dạng mới hoặc bạn đã ngừng mang một định dạng.


  • Cập nhật một mục

    Khi cập nhật một mục trong mã ứng dụng, hãy tập trung vào bốn yếu tố:

    Hãy tưởng tượng rằng gần đây bạn đã thêm định dạng sách nói cho The Rainmaker của John Grisham và bạn muốn cập nhật bảng DynamoDB của chúng tôi để thể hiện thay đổi đó. Lệnh gọi APIUpdateItem sẽ như sau.

    # 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",
    )

    Lệnh gọi API UpdateItem của bạn có một trong bốn yếu tố. Trước tiên, lệnh này chỉ định Khóa của mục nó muốn hoạt động trên đó bằng cách đưa ra Tác giả John GrishamTiêu đề The Rainmaker.

    Thứ hai, bạn chỉ định tên thuộc tính biểu thức sẽ sử dụng trong biểu thức cập nhật của mình. Bạn đang sửa đổi thuộc tính Định dạng, đây là bản đồ, vì vậy bạn cần xác định tên thuộc tính biểu thức cho cả thuộc tính (Định dạng) và khóa trong bản đồ (Sách nói).

    Cuối cùng, bạn ghi biểu thức cập nhật bạn muốn áp dụng trong lệnh gọi API UpdateItem của mình. Biểu thức cập nhật này sử dụng cả tên thuộc tính biểu thức và giá trị thuộc tính biểu thức như được xác định trước đó. Biểu thức của bạn cho SET #formats.#audiobook = :id yêu cầu DynamoDB thiết lập khóa Sách nói của thuộc tính Định dạng về giá trị ID cho sẵn của 8WE3KPTP

    Thứ ba, bạn nêu giá trị bạn muốn sử dụng trong các giá trị thuộc tính biểu thức. Trong bản đồ Định dạng, giá trị cho một định dạng là số mục trong hệ thống kho của bạn. Trong ví dụ này, giá trị là 8WE3KPTP.

    Tập lệnh update_item.py thực hiện lệnh gọi API UpdateItem hiển thị trong khối mã trước đó trong mô-đun. Để thể hiện sự khác biệt của lệnh gọi, trước tiên, tập lệnh sẽ truy xuất và in mục đó trước khi thực hiện lệnh gọi cập nhật. Sau đó, nó thực hiện lệnh gọi API UpdateItem. Cuối cùng, tập lệnh truy xuất và in mục lần thứ hai để hiển thị sự khác biệt.

    Bạn có thể thấy điều này diễn ra bằng cách chạy lệnh sau.

    $ python update_item.py

    Bạn sẽ thấy kết quả đầu ra như sau.

    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'}

    Như bạn có thể thấy, The Rainmaker có định dạng Sách nói mới sau khi áp dụng cập nhật.


    Trong mô-đun này, bạn đã học cách cập nhật mục hiện tại với API UpdateItem. Trong mô-đun tiếp theo, bạn học cách dọn dẹp các tài nguyên đã tạo để tránh các khoản phí bổ sung.