Exemple de update_item dans dynamodb boto3
Suivantes la documentation, je suis en train de créer une instruction de mise à jour qui permettra de mettre à jour ou ajouter si ce n'existe qu'un seul attribut dans une table dynamodb.
Je vais essayer cette
response = table.update_item(
Key={'ReleaseNumber': '1.0.179'},
UpdateExpression='SET',
ConditionExpression='Attr(\'ReleaseNumber\').eq(\'1.0.179\')',
ExpressionAttributeNames={'attr1': 'val1'},
ExpressionAttributeValues={'val1': 'false'}
)
L'erreur que j'obtiens est:
botocore.exceptions.ClientError: An error occurred (ValidationException) when calling the UpdateItem operation: ExpressionAttributeNames contains invalid key: Syntax error; key: "attr1"
Si quelqu'un a fait quelque chose de semblable à ce que je suis en train de réaliser s'il vous plaît partagez exemple.
OriginalL'auteur Dmitry R | 2015-12-24
Vous devez vous connecter pour publier un commentaire.
Trouvé de travail exemple ici, très important à la liste que les Clés de tous les index de la table, il aura besoin de plus de requête avant de mettre à jour, mais il fonctionne.
OriginalL'auteur Dmitry R
Détails sur dynamodb mises à jour à l'aide de
boto3
sembler incroyablement éparses en ligne, alors j'espère que ces solutions de remplacement sont utiles.get /put
mise à jour réelle
AttributeUpdates est un héritage param dans boto3, et c'est probablement mieux d'utiliser UpdateExpression dans Dmitry R de la réponse ci-dessus
AttributeUpdates semble beaucoup plus propre API. 🙁
AttributeUpdates est plus simple, mais les Expressions sont plus puissants, car ils peuvent être paramétrées pour la manipulation de mot réservé collisions, l'injection de code et d'autres questions.
OriginalL'auteur Ryan Tuck
Le code d'origine exemple:
Fixe:
Dans le marqué réponse il a également été révélé qu'il y est une Gamme de Clé, donc cela devrait également être inclus dans le
Key
. Le update_item méthode doit chercher à l'enregistrement exact à être mis à jour, il n'y a pas de lot de mises à jour, et vous ne pouvez pas mettre à jour une plage de valeurs filtrées à l'une des conditions pour obtenir un enregistrement unique. LeConditionExpression
est-il utile de faire des mises à jour de la quantité; c'est à dire ne pas mettre à jour la valeur si elle est déjà la valeur. Ce n'est pas comme un sqlwhere
clause.À propos de l'erreur rencontrée.
ExpressionAttributeNames
est une liste des principaux espaces réservés pour une utilisation dans le UpdateExpression, utile si la clé est un mot réservé.De la documentation, "Une expression de l'attribut nom doit commencer par un #, et être suivi par un ou plusieurs caractères alphanumériques". L'erreur est parce que le code n'a pas utilisé un ExpressionAttributeName qui commence avec une
#
et pas aussi utilisé dans leUpdateExpression
.ExpressionAttributeValues
sont des espaces réservés pour les valeurs que vous souhaitez mettre à jour, et ils doivent commencer par:
OriginalL'auteur Davos