Wie führe ich einen Artikel mit boto3 in eine dynamodb-Tabelle ein

9

Wenn ich eine Tabelle mit einem Hash-Schlüssel von userId und einem Bereichsschlüssel von productId habe, wie lege ich ein Element nur dann in diese Tabelle, wenn es nicht bereits mit dynamo-Bindings von boto3 existiert?

Der normale Aufruf von put_item sieht so aus

%Vor%

Mein Aufruf mit einer ConditionExpression sieht folgendermaßen aus:

%Vor%

Aber das löst jedes Mal eine ConditionalCheckFailedException aus. Gibt an, ob ein Element mit der gleichen ProductId existiert oder nicht.

    
aychedee 05.05.2016, 14:46
quelle

2 Antworten

24

Die Dokumentation dafür ist leider nicht übersichtlich. Ich musste etwas Ähnliches erreichen, und hier ist, was für mich funktionierte, mit Boto3:

%Vor%

Ähnlich wie bei der anderen Antwort befindet sich der Schlüssel in der attribute_not_exists-Funktion, aber es war mir zunächst unklar, wie das funktioniert. Nach einigen Experimenten war ich in der Lage, mit dem oben genannten loszulegen.

    
jimjkelly 14.09.2016, 19:54
quelle
1

Ich denke, dass Sie mit client.put_item und nicht mit table.put_item

eine bessere Dokumentation erhalten

von boto3 Dokumentation :

  

Um zu verhindern, dass ein neues Element ein vorhandenes Element ersetzt, verwenden Sie einen Bedingungsausdruck, der die Funktion attribute_not_exists enthält, wobei der Name des Attributs als Partitionsschlüssel für die Tabelle verwendet wird. Da jeder Datensatz dieses Attribut enthalten muss, ist die attribute_not_exists-Funktion nur erfolgreich, wenn kein übereinstimmendes Element vorhanden ist.

Bedingung Ausdruck:

  

ConditionExpression (string) - Eine Bedingung, die in erfüllt sein muss   Reihenfolge für eine bedingte PutItem-Operation, um erfolgreich zu sein.

     

Ein Ausdruck kann eine der folgenden Angaben enthalten:

     

Funktionen: attribute_exists | attribute_not_exists | Attributstyp |   enthält | beginnt_mit | Größe Bei diesen Funktionsnamen wird zwischen Groß- und Kleinschreibung unterschieden.

Ich benutze dynamodb2 überschreiben Parameter auf item.save()

    
Eyal Ch 05.05.2016 14:59
quelle

Tags und Links