In questo modulo, utilizzerai l'API UpdateItem per aggiornare gli attributi di un elemento esistente nel nostro database. In questo modulo, utilizzerai l'API UpdateItem per aggiornare gli attributi di un elemento esistente nel nostro database.

Tempo necessario per completare il modulo: 15 minuti


Oltre a scrivere e leggere i dati, hai la necessità di aggiornare con regolarità i dati esistenti in un database. L'ideale è aggiornare questi dati in una singola chiamata, anziché dovere prima leggere un elemento per poi riscrivere l'intero elemento con gli aggiornamenti del caso. DynamoDB ti consente di aggiornare gli elementi esistenti utilizzando la chiamata API UpdateItem.

Per il nostro esempio, ricorda che ogni elemento dispone di un attributo Formats (Formati), che è una mappa di tutti i diversi formati che la tua libreria detiene per un certo titolo. Nel corso del tempo, questa mappa deve essere aggiornata per un certo libro, perché hai aggiunto un nuovo formato o perché non supporti più un formato.


  • Aggiornamento di un elemento

    Quando aggiorni un elemento nel codice della tua applicazione, devi tenere in considerazione quattro elementi:

    Immagina di avere aggiunto di recente il formato audiobook per il libro L'uomo della pioggia di John Grisham, e che desideri aggiornare la tabella DynamoDB per rispecchiare tale modifica. La chiamata API UpdateItem avrà il seguente aspetto.

    # 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 chiamata API UpdateItem contiene tutti e quattro gli elementi. Innanzitutto, specifica la chiave dell'elemento su cui intende operare, fornendo come Autore John Grisham e come Titolo L'uomo della pioggia.

    In secondo luogo, specifica i nomi degli attributi dell'espressione che utilizzerai nell'espressione dell'aggiornamento. Stai modificando l'attributo Formati, che è una mappa, pertanto dovrai definire i nomi degli attributi dell'espressione sia per l'attributo (Formati) sia per la chiave all'interno della mappa (Audiobook).

    Infine, scrivi l'espressione di aggiornamento che desideri applicare nella chiamata API UpdateItem. Questa espressione di aggiornamento utilizza sia i nomi degli attributi dell'espressione sia i valori degli attributi dell'espressione come specificato in precedenza. La tua espressione SET #formats.#audiobook = :id comunica a DynamoDB di impostare la chiave Audiobook dell'attributo Formati con il valore ID assegnato di 8WE3KPTP

    In terzo luogo, dichiari il valore che vuoi utilizzare nei valori degli attributi dell'espressione. Nella mappa Formati, il valore di un formato è il numero dell'elemento all'interno del tuo sistema di inventario. In questo esempio, il valore è 8WE3KPTP.

    Lo script update_item.py effettua la chiamata API UpdateItem mostrata nel blocco di codice in una fase precedente del modulo. Per dimostrare le modifiche apportate dalla chiamata, lo script in primo luogo recupera e stampa l'elemento prima che sia stata effettuata la chiamata di aggiornamento. Successivamente, effettua la chiamata API UpdateItem. Infine, lo script recupera e stampa l'elemento una seconda volta per mostrare la differenza.

    Puoi osservare lo svolgimento del processo eseguendo il seguente comando.

    $ python update_item.py

    Dovresti visualizzare l'output seguente.

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

    Come puoi osservare, dopo l'applicazione dell'aggiornamento per L'uomo della pioggia è disponibile il nuovo formato Audiobook.


    In questo modulo hai imparato come aggiornare un elemento esistente con l'API UpdateItem. Nel modulo successivo, scoprirai come effettuare la pulizia delle risorse che hai creato al fine di evitare addebiti aggiuntivi.