2016-01-22 29 views
28

我正在嘗試在boto3中爲DynamoDB使用update_item功能。是否有可能在update_item中結合if_not_exists和list_append

我現在正在努力更新項目列表。如果列表尚不存在,我想創建一個新列表,否則追加到現有列表。

使用形式SET my_list = list_append(my_list, :my_value)UpdateExpression返回錯誤「所提供的表達指的是不存在於項目存在的屬性」如果列表不存在

任何想法如何我將不得不修改我的UpdateExpression

感謝&問候, 費邊

回答

65

可以使用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":[] } 
+0

謝謝你的提示!非常整潔的解決方案。 – fabian

+1

你有任何想法,如果這是受競賽條件?我正在查看AWS文檔,他們似乎沒有任何鎖定/事務(至少對於Python SDK)。它看起來像這樣的代碼可以a:從數據庫中讀取列表,b:追加新值,c:覆蓋舊值,在此期間可以更改_could_。 –

+0

我無法在文檔中找到直接確認,但我希望單個UpdateItem操作是原子的,這是我在常見問題中發現的最接近的東西 - 「您可以使用單個API調用在一行中增加或減少數字屬性。同樣,你可以原子地添加或刪除設置,列表或地圖「,請參閱https://aws.amazon.com/dynamodb/faqs/ –

相關問題