Ich benutze DynamoDB als eine K-V db (weil es nicht viele Daten gibt, ich denke, das ist in Ordnung), und ein Teil von 'V' ist Listentyp (etwa 10 Elemente). Es gibt eine Sitzung, um einen neuen Wert anzuhängen, und ich kann keinen Weg finden, dies in 1 Anfrage zu tun. Was ich gemacht habe, ist so:
%Vor%Ich beantrage den Server zuerst und speichere ihn, nachdem ich den Wert geändert habe. Das ist nicht atomar und sieht hässlich aus. Gibt es eine Möglichkeit, dies in einer Anfrage zu tun?
Der folgende Code sollte mit boto3 funktionieren:
%Vor%Die Methode get_dynamodb_resource ist hier nur:
%Vor% Sie können dies in einer Anfrage tun, indem Sie die API UpdateItem
in verwenden Verbindung mit einem UpdateExpression
. Da Sie eine Liste anhängen möchten, verwenden Sie die Aktion SET
mit der Funktion list_append
:
SET
unterstützt die folgenden Funktionen:...
list_append (operand, operand)
- wird zu einer Liste mit einem neuen Wert ausgewertet Element hinzugefügt. Sie können das neue Element an den Anfang oder anhängen das Ende der Liste durch Umkehrung der Reihenfolge der Operanden.
Sie können einige Beispiele dafür auf der Ändern von Elementen und Attributen mit Aktualisierungsausdrücken sehen Dokumentation :
Im folgenden Beispiel wird der FiveStar Überprüfungsliste ein neues Element hinzugefügt. Der Name des Ausdrucksattributs
%Vor%#pr
ist ProductReviews ; das Attribut Wert:r
ist eine Ein-Element-Liste. Wenn die Liste zuvor zwei hatte Elemente,[0]
und[1]
, dann ist das neue Element[2]
.Im folgenden Beispiel wird der FiveStar Überprüfung ein weiteres Element hinzugefügt Liste, aber diesmal wird das Element an den Anfang der hinzugefügt Liste bei
%Vor%[0]
. Alle anderen Elemente in der Liste werden um verschoben eins.
Die #pr
und :r
verwenden Platzhalter für die Attributnamen und -werte. Weitere Informationen finden Sie unter Verwenden von Platzhaltern für Attributnamen und -werte .
Tags und Links python amazon-web-services boto amazon-dynamodb