Search code examples
amazon-dynamodbboto3

Is it possible to combine if_not_exists and list_append in update_item


I'm trying to use the update_item functionality for DynamoDB in boto3.

I'm struggling right now to update lists for items. I would like to create a new list if the list does not exist yet and otherwise append to the existing list.

Using an UpdateExpression of the form SET my_list = list_append(my_list, :my_value) returns an error "The provided expression refers to an attribute that does not exist in the item" if the list does not exist yet.

Any idea how I would have to modify my UpdateExpression?


Solution

  • You can use list_append(if_not_exists()) construction.

    UpdateExpression:

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

    ExpressionAttributeValues:

    { ":my_value":{"L": [{"S":"test"}]}, ":empty_list":{"L":[]} }
    

    Update: as mentioned in the comments, boto3 now raises an error for the expression above and a version without explicit types works: { ":my_value": ["test"], ":empty_list":[] }.