Подтвердить что ты не робот

Можно ли комбинировать if_not_exists и list_append в update_item

Я пытаюсь использовать функциональность update_item для DynamoDB в boto3.

Сейчас я боюсь, чтобы обновлять списки для элементов. Я хотел бы создать новый список, если список еще не существует и в противном случае добавляется в существующий список.

Использование UpdateExpression формы SET my_list = list_append(my_list, :my_value) возвращает ошибку "Представленное выражение относится к атрибуту, который не существует в элементе", если список еще не существует.

Любая идея, как мне придется изменить мой UpdateExpression?

Спасибо и с наилучшими пожеланиями, Fabian

4b9b3361

Ответ 1

Вы можете использовать конструкцию 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":[] }

Ответ 2

Альтернативой решению Boris может быть использование установить вместо типа данных списка и использовать ключевое слово ADD, оно делает именно то, что вы хотите.

С помощью добавления выражение update становится: ADD setName :s

И значения атрибута выражения могут быть такими: {":s": {"SS":["First", "Second"]}}

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