Dmitri R.
Siguiente la documentaciónestoy tratando de crear una declaración de actualización que actualizará o agregará, si no existe, solo un atributo en una tabla de dynamodb.
estoy intentando esto
response = table.update_item(
Key={'ReleaseNumber': '1.0.179'},
UpdateExpression='SET',
ConditionExpression='Attr(\'ReleaseNumber\').eq(\'1.0.179\')',
ExpressionAttributeNames={'attr1': 'val1'},
ExpressionAttributeValues={'val1': 'false'}
)
El error que estoy recibiendo es:
botocore.exceptions.ClientError: An error occurred (ValidationException) when calling the UpdateItem operation: ExpressionAttributeNames contains invalid key: Syntax error; key: "attr1"
Si alguien ha hecho algo similar a lo que estoy tratando de lograr, por favor comparta un ejemplo.
-
Cabe señalar que su error original se refería a ExpressionAttributeNames que se excluyó de la muestra proporcionada en esta respuesta… aunque debe incluir todos los valores de la clave para actualizar un elemento, este no fue directamente el error que usted tenía originalmente.
– Jaime
23 de marzo de 2016 a las 3:44
-
Vale la pena mencionar,
Key
aquí debería tener todas las claves para esoindex
siLocal Secondary Index
oGlobal Secondary Index
. Como aquí,ReleaseNumber
esprimary key
yTimestamp
es unsort key
por defecto.– Abhishake Gupta
28 de junio de 2019 a las 17:48
-
Esta solución no funcionó para mí, tuve que agregar
ExpressionAttributeNames
junto conExpressionAttributeValues
mientras actualiza el artículo.– AADProgramación
24 oct 2020 a las 14:51
-
Intenté lo anterior pero no funcionó. intenté usar
ExpressionAttributeNames
pero aun así no funcionó. Obteniendo el errorbotocore.exceptions.ClientError: An error occurred (ValidationException) when calling the UpdateItem operation: The provided key element does not match the schema
– Matemáticas duras
3 de diciembre de 2020 a las 19:43
-
Esta respuesta aceptada no funciona. La cola de edición para esta respuesta está llena, por lo tanto, no se puede editar. Otra respuesta a continuación debe marcarse como aceptada en su lugar, que usa “ExpressionAttributeNames”. stackoverflow.com/a/53201316/5600195
– Utkarsh
5 de febrero de 2022 a las 23:38
-
Aunque usar AttributeUpdates como este es correcto y aún debería funcionar (y me gusta más la sintaxis que UpdateExpression), la documentación menciona que este método es heredado (y, por lo tanto, es posible que ya no funcione en algún momento). Fuente: boto3.readthedocs.io/en/latest/reference/services/…
– Aart Goossen
25 de abril de 2018 a las 12:17
-
AttributeUpdates es un parámetro heredado en boto3, por lo que probablemente sea mejor usar UpdateExpression en la respuesta anterior de Dmitry R
– gimbel0893
23 de mayo de 2018 a las 14:26
-
AttributeUpdates parece una API mucho más limpia. 🙁
–Andy Hayden
25 de junio de 2018 a las 17:26
-
@AndyHayden AttributeUpdates es más simple, pero las expresiones son más poderosas porque se pueden parametrizar para manejar colisiones de palabras reservadas, inyección de código y otros problemas.
– Davos
8 de noviembre de 2018 a las 3:56
-
El hecho de que eliminen AttributeUpdates me molesta mucho.
– Capitán Jack Sparrow
14/10/2022 a las 20:09
-
+1 ya que esto es excelente, pero tenga en cuenta que tiene dos errores: 1. No maneja palabras clave reservadas (como el nombre) 2. No maneja atributos que comienzan con símbolos como __. Ambos problemas se pueden resolver usando ExpressionAttributeNames
– orcamán
3 de marzo de 2021 a las 11:06
-
¿Por qué excluye el último elemento de su
join
¿expresión?– Mark Ransom
18 abr 2021 a las 18:33
-
@MarkRansom para eliminar la coma final
– Jam M. Hernández Quiceno
19 abr 2021 a las 15:38
-
Ah, no me di cuenta de que el segmento estaba en la cadena final y no en la lista. Tiene sentido ahora, gracias.
– Mark Ransom
19 abr 2021 a las 15:45
Sé que es una pregunta muy antigua, pero me pregunto… si su elemento ya existe, “put_item” lo sobrescribirá. ¿Por qué debo usar update_item si no puedo cambiar ninguna clave_índice?
– claudio
7 sep 2021 a las 12:53
@Claudiu supongo que para actualizar no todo campos
– mccc
29 de noviembre de 2021 a las 12:32