Dans ce module, vous utilisez l'API UpdateItem pour mettre à jour les attributs d'un élément existant dans notre base de données. Dans ce module, vous utilisez l'API UpdateItem pour mettre à jour les attributs d'un élément existant dans notre base de données.

Durée du module : 15 minutes


En plus d'écrire et de lire des données, vous voulez régulièrement mettre à jour les données existantes dans une base de données. Il est préférable de mettre à jour ces données en même temps plutôt que de commencer par lire un élément puis de réécrire l'ensemble de l'élément avec les mises à jour obtenues. DynamoDB vous permet de mettre à jour les éléments en place en utilisant l'appel d'API UpdateItem.

Pour cet exemple, rappelez-vous que chaque élément dispose d'un attribut Formats. Il s'agit d'une carte de l'ensemble des différents formats que votre librairie possède pour un titre donné. Au fil du temps, cette carte aura besoin d'être mise à jour pour un livre spécifique, soit parce que vous aurez ajouté un nouveau format soit parce que vous aurez arrêté d'utiliser un format.


  • Mettre à jour un élément

    Lorsque vous mettez à jour un élément dans votre code d'application, vous devez vous concentrer sur quatre points importants :

    • La clé qui identifie l'élément que vous voulez mettre à jour.
    • L'expression des noms des attributs, qui sont les espaces réservés aux attributs que vous souhaitez mettre à jour.
    • L'expression des valeurs des attributs, qui sont les espaces réservés aux valeurs pour lesquelles vous souhaitez mettre à jour vos attributs.
    • L'expression de mise à jour, qui utilise l'expression des noms des attributs et l'expression des valeurs des attributs pour déclarer les mises à jour que vous souhaitez.

    Imaginez que vous ayez récemment ajouté une version audio du roman L'Idéaliste, de John Grisham, et que vous vouliez mettre à jour notre table DynamoDB afin de faire apparaître cette modification. L'appel d'API UpdateItem ressemblerait à ce qui suit.

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

    Votre appel d'API UpdateItem possède les quatre points importants. Tout d'abord, l'appel d'API précise la clé de l'élément qu'il veut exploiter en fournissant le nom de l'auteur comme John Grisham et le titre comme L'Idéaliste.

    Ensuite, vous indiquez l'expression des noms des attributs que vous utiliserez dans votre expression de mise à jour. Vous être en train de modifier l'attribut Formats , qui constitue une carte, vous devez donc définir l'expression des noms des attributs à la fois pour l'attribut (Formats) et pour la clé contenue dans votre carte (Livre audio).

    Enfin, écrivez l'expression de mise à jour que vous souhaitez appliquer dans votre appel d'API UpdateItem. Cette expression de mise à jour utilise à la fois l'expression des noms des attributs et l'expression des valeurs des attributs telles que précédemment définies. Votre expression SET #formats.#audiobook = :id indique à DynamoDB de configurer la clé Livre audio de l'attribut Formats selon l'ID de valeur donné de 8WE3KPTP

    Troisièmement, vous devez indiquer la valeur que vous voulez utiliser dans l'expression des noms des attributs. Dans votre carte Formats, la valeur d'un format est le numéro de l'élément présent dans votre système d'inventaire. Dans cet exemple, la valeur est 8WE3KPTP.

    Le script update_item.py permet d'afficher l'appel d'API UpdateItem plus tôt dans le bloc de code de ce module. Pour montrer la différence faite par l'appel, le script commence par récupérer et imprimer l'élément avant de faire l'appel de mise à jour. Ensuite, le script lance l'appel d'API UpdateItem. Enfin, le script récupère et imprime l'élément une seconde fois pour vous montrer la différence.

    Vous pouvez effectuer cette action en exécutant la commande qui suit.

    $ python update_item.py

    Vous devrez obtenir le résultat suivant.

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

    Comme vous pouvez le voir, une fois la mise à jour appliquée, L'Idéaliste possède désormais un nouveau format, Livre audio.


    Dans ce module, vous avez appris à mettre à jour un élément existant grâce à l'API UpdateItem. Dans le module suivant, vous apprendrez à nettoyer les ressources déjà créées afin d'éviter des charges supplémentaires.