En este módulo, se utiliza la API UpdateItem para actualizar los atributos de un elemento existente en la base de datos. En este módulo, se utiliza la API UpdateItem para actualizar los atributos de un elemento existente en la base de datos.

Tiempo para completar el módulo: 15 minutos


Además de escribir y leer datos, se busca actualizar regularmente los datos existentes en la base de datos. Es preferible contar con la capacidad de actualizar estos datos mediante una sola llamada a la API, en lugar de primero leer un elemento y luego escribir de regreso el elemento completo con las actualizaciones hechas. DynamoDB permite la actualización de los datos in situ mediante la llamada a la API UpdateItem.

Por ejemplo, recuerde que cada elemento tiene un atributo de Formatos. Este es un mapa de todos los diferentes formatos que la librería tiene de un título específico. Con el tiempo, este mapa se debe actualizar para un libro específico, ya sea porque se ha agregado un nuevo formato o porque ya no se utiliza un formato.


  • Actualizar un elemento

    Al actualizar un elemento en el código de la aplicación, concéntrese en cuatro componentes:

    Suponga que recientemente agregó un formato de audiolibro para el libro The Rainmaker escrito por John Grisham y desea actualizar la tabla de DynamoDB para reflejar el cambio. La llamada a la API UpdateItem tendría el siguiente aspecto.

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

    La llamada a la API UpdateItem tiene los cuatro elementos. Primero, especifica la Clave del elemento sobre el que desea trabajar. Para ello, proporciona el Autor como John Grisham y el Título como The Rainmaker.

    Segundo, se especifican los nombres de atributo de expresión que se utilizarán en la expresión de actualización. En este caso se modificará el atributo de Formatos , que es un mapa. Por lo tanto, debe definir nombres de atributo de expresión tanto para el atributo (Formatos) como para la clave dentro del mapa (Audiolibro).

    Por último, se escribe la expresión de actualización que se desea aplicar en la llamada a la API UpdateItem . La expresión de actualización utiliza tanto los nombres de atributo de expresión como los valores de atributo de expresión, tal como se han definido previamente. La expresión SET #formats.#audiobook = :id ordena a DynamoDB configurar la clave Audiolibro del atributo Formatos al valor de ID 8WE3KPTP dado. 

    En tercer lugar, se declara el valor que se desea utilizar en los valores de atributo de expresión. En el mapa de formatos, el valor de un formato es el número de elemento en el sistema de inventario. En este caso, el valor es 8WE3KPTP.

    El script update_item.py realiza la llamada a la API UpdateItem que se mostró en el bloque de código anterior del módulo. Para demostrar la diferencia causada por la llamada, el script primero recupera e imprime el elemento antes de que se realice la llamada de actualización. Luego realiza la llamada a la API UpdateItem. Por último, el script recupera e imprime el elemento por segunda vez para mostrar la diferencia.

    Esta acción se puede visualizar mediante la ejecución del siguiente comando.

    $ python update_item.py

    Debería ver el siguiente resultado.

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

    Como puede ver, The Rainmaker tiene un nuevo formato de Audiolibro tras la actualización que se aplicó.


    En este módulo, aprendió a actualizar un elemento existente mediante la API UpdateItem . En el siguiente módulo, aprenderá a limpiar los recursos que creó a fin de evitar cargos adicionales.