web-dev-qa-db-fra.com

Est-il possible de combiner if_not_exists et list_append dans update_item

J'essaie d'utiliser la fonctionnalité update_item Pour DynamoDB dans boto3.

J'ai du mal à mettre à jour les listes d'articles. Je voudrais créer une nouvelle liste si la liste n'existe pas encore et sinon l'ajouter à la liste existante.

L'utilisation d'un UpdateExpression de la forme SET my_list = list_append(my_list, :my_value) renvoie une erreur "L'expression fournie fait référence à un attribut qui n'existe pas dans l'élément" si la liste n'existe pas encore.

Une idée de la façon dont je devrais modifier mon UpdateExpression?

Merci et meilleures salutations, Fabian

54
fabian

Vous pouvez utiliser la construction list_append(if_not_exists()).

UpdateExpression:

'SET my_list2 = list_append(if_not_exists(my_list2, :empty_list), :my_value)'

ExpressionAttributeValues:

{ ":my_value":[{"S":"test"}], ":empty_list":[] }
106
Boris Serebrov

Une alternative à la solution Boris pourrait être d'utiliser set au lieu de lister le type de données et d'utiliser le mot clé ADD, il fait exactement ce que vous voulez.

Avec Ajouter, l'expression de mise à jour devient: ADD setName :s

Et les valeurs d'attribut d'expression peuvent être comme: {":s": {"SS":["First", "Second"]}}

http://docs.aws.Amazon.com/amazondynamodb/latest/developerguide/Expressions.UpdateExpressions.html#Expressions.UpdateExpressions.ADD

3
Ayush Pateria