2017-06-05 5 views
1

Ich habe die offiziellen AWS-Dokumente und mehrere Foren gelesen, kann immer noch nicht finden, was ich falsch mache beim Hinzufügen von Element zu string_set mit Python/Boto3 und Dynamodb. Hier ist mein Code:How to Add string_set auf Dynamodb mit Boto3

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

Der Fehler Ich erhalte ist:

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

+0

Brauchen Sie "SS" für einen String-Set? Wie: {": val0": {"SS": ["aaa", "bbb"]}}? – jarmod

+0

Ich habe dieses Format auch versucht und den Fehler erhalten: Beim Aufruf der Operation UpdateItem ist ein Fehler (ValidationException) aufgetreten: Ungültiger UpdateExpression: Falscher Operandentyp für Operator oder Funktion; Operator: ADD, Operandentyp: MAP \ ". – xyz

+0

Das ursprüngliche Problem gefunden, ich muss die Low-Level-API verwenden, um dies zu tun, und das richtige Format wäre so halfer sagte {": val0 ": {" SS ": [" aaa "," bbb "]}} – xyz

Antwort

1

Es sieht aus wie Sie für sich eine Methode herausgefunden, aber für andere, die hierher kommen Suche nach einer Antwort:

  1. Ihre 'Key' Syntax muss einen Datentyp (wie 'S' oder 'N')
  2. Sie müssen "SS" als Datentyp verwenden, in ExpressionAttributeValues und
  3. Sie brauchen nicht "set" in Ihrem ExpressionAttributeValues.

Hier ist ein Beispiel, das ich gerade lief (ich hatte ein bestehendes Set, test_set, mit 4 vorhandenen Werte, und ich bin ein 5. Hinzufügen der String 'fünf'):

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']}}) 

So vor , der String-Satz sah aus wie ['one','two','three','four'], und danach sah es aus wie ['one','two','three','four','five']