Можно ли комбинировать if_not_exists и list_append в update_item
Я пытаюсь использовать функциональность update_item
для DynamoDB в boto3.
Сейчас я боюсь, чтобы обновлять списки для элементов. Я хотел бы создать новый список, если список еще не существует и в противном случае добавляется в существующий список.
Использование UpdateExpression
формы SET my_list = list_append(my_list, :my_value)
возвращает ошибку "Представленное выражение относится к атрибуту, который не существует в элементе", если список еще не существует.
Любая идея, как мне придется изменить мой UpdateExpression
?
Спасибо и с наилучшими пожеланиями,
Fabian
Ответы
Ответ 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