¿Es posible combinar si no existe y agregar una lista en el elemento actualizar


Estoy intentando usar la funcionalidad update_item para DynamoDB en boto3.

Estoy luchando en este momento para actualizar las listas de elementos. Me gustaría crear una nueva lista si la lista aún no existe y, de lo contrario, agregarla a la lista existente.

Mediante un UpdateExpression de la forma SET my_list = list_append(my_list, :my_value) devuelve un error "La expresión se refiere a un atributo que no existe en el elemento" si la lista no existe todavía.

Cualquier idea de cómo tendría que modificar mi UpdateExpression?

Gracias y saludos cordiales, Fabian

Author: fabian, 2016-01-22

2 answers

Puede usar list_append(if_not_exists()) construcción.

Expresión de actualización:

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

ExpressionAttributeValues:

{ ":my_value":[{"S":"test"}], ":empty_list":[] }
 82
Author: Boris Serebrov,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2016-01-25 20:28:44

Una alternativa a la solución de Boris podría ser usar set en lugar de list datatype y usar la palabra clave ADD, hace exactamente lo que quieres.

Con Add, la expresión de actualización se convierte en: ADD setName :s

Y los valores de los atributos de expresión pueden ser como: {":s": {"SS":["First", "Second"]}}

Http://docs.aws.amazon.com/amazondynamodb/latest/developerguide/Expressions.UpdateExpressions.html#Expressions.UpdateExpressions.ADD

 2
Author: Ayush Pateria,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2017-06-22 11:26:52