2017-06-05 67 views
1

我已閱讀官方的AWS文檔和幾個論壇,但仍無法找到我在使用Python/Boto3和Dynamodb將項目添加到string_set時出錯的問題。這裏是我的代碼:如何使用Boto3將項目添加到Dynamodb上的string_set

table.update_item(
       Key={ 
        ATT_USER_USERID: event[ATT_USER_USERID] 
       }, 
       UpdateExpression="add " + key + " :val0" , 
       ExpressionAttributeValues = {":val0" : set(["example_item"]) }, 
      ) 

我得到的錯誤是:

An error occurred (ValidationException) when calling the UpdateItem operation: An operand in the update expression has an incorrect data type\"

+0

你需要「SS」的字符串集?例如:{「:val0」:{「SS」:[「aaa」,「bbb」]}}? – jarmod

+0

我也嘗試過這種格式,並且得到錯誤:調用UpdateItem操作時發生錯誤(ValidationException):無效UpdateExpression:操作符或函數的操作數類型不正確;運算符:ADD,操作數類型:MAP \「。 – xyz

+0

發現原來的問題,我需要使用低級別的API才能做到這一點,正確的格式將如halfer所示{」:val0「:{」SS 「:[」aaa「,」bbb「]}} – xyz

回答

1

看起來你自己想出了一個方法,但對於其他人誰到這裏來尋找一個答案:

  1. 你的「鑰匙」語法需要一個數據類型(如「S」或「N」)
  2. 您需要ExpressionAttributeValues使用「SS」作爲數據類型,並
  3. 你不需要在你的ExpressionAttributeValues中「設置」。

下面是一個例子,我只是跑(我有一個現有的一套,TEST_SET,有4個現有的值,並且我加入一個5,字符串「十二五」):所以之前

import boto3 
db = boto3.client("dynamodb") 
db.update_item(TableName=TABLE, 
       Key={'id':{'S':'test_id'}}, 
       UpdateExpression="ADD test_set :element", 
       ExpressionAttributeValues={":element":{"SS":['five']}}) 

,字符串集看起來像['one','two','three','four'],之後,它看起來像['one','two','three','four','five']

相關問題