2015-12-24 11 views
9

Nach the documentation versuche ich eine Update-Anweisung zu erstellen, die aktualisiert oder hinzugefügt wird, wenn nicht nur ein Attribut in einer dynamodb-Tabelle vorhanden ist.Beispiel für update_item in dynamodb boto3

Ich versuche, diese

response = table.update_item(
    Key={'ReleaseNumber': '1.0.179'}, 
    UpdateExpression='SET', 
    ConditionExpression='Attr(\'ReleaseNumber\').eq(\'1.0.179\')', 
    ExpressionAttributeNames={'attr1': 'val1'}, 
    ExpressionAttributeValues={'val1': 'false'} 
) 

Der Fehler Ich erhalte ist:

botocore.exceptions.ClientError: An error occurred (ValidationException) when calling the UpdateItem operation: ExpressionAttributeNames contains invalid key: Syntax error; key: "attr1"

Wenn jemand etwas getan hat, ähnlich dem, was ich versuche bitte Beispiel teilen zu erreichen .

Antwort

13

Gefunden Arbeitsbeispiel here, sehr wichtig, um alle Indizes der Tabelle als Schlüssel aufzulisten, dies erfordert zusätzliche Abfrage vor dem Update, aber es funktioniert.

response = table.update_item(
    Key={ 
     'ReleaseNumber': releaseNumber, 
     'Timestamp': result[0]['Timestamp'] 
    }, 
    UpdateExpression="set Sanity = :r", 
    ExpressionAttributeValues={ 
     ':r': 'false', 
    }, 
    ReturnValues="UPDATED_NEW" 
) 
+0

Es soll beachtet werden, dass Ihre ursprünglichen Fehler zu ExpressionAttributeNames bezogen, die von der Probe in dieser Antwort zur Verfügung gestellt ausgeschlossen worden ist .... während Sie alle Werte müssen umfassen für die Schlüssel dies ein Element aktualisieren war nicht direkt der Fehler, den Sie ursprünglich hatten. – James