Ich frage mich, ob ich Datensätze mit Model.get_by_key_name () vs Model.get_by_id ()
abrufen kannNehmen wir beispielsweise an, dass ich ein JSON-Objekt zurückgebe, mit dem eine Tabelle mit Datensätzen angezeigt wird, und für jeden Datensatz eine Schaltfläche zum Löschen dieses Datensatzes vorhanden ist. Angenommen, ich habe das Modell 'Foo' und die Modellinstanz 'foo'.
Ich glaube, dass ich jede Schaltfläche mit dem entsprechenden Datensatz verbinden kann, indem ich entweder:
%Vor%oder
%Vor%Einer dieser Werte gelangt in ein HTML-Formular, und der Benutzer kann auf die Schaltfläche klicken, die die Anforderung zum Löschen des Datensatzes mit diesem Schlüssel / dieser ID auslöst.
Die Anfrage würde dann zu entweder:
führen %Vor%oder
%Vor%Nun, da ich der unentschlossene ADHS-Programmierer bin, der ich bin, muss ich wissen ... was ist der "richtige" Weg? Beide scheinen zu funktionieren, aber gibt es Umstände, die den anderen vorzuziehen scheinen? Gibt es einen Vorteil bei der Verwendung des "Schlüssel" -Wegs gegenüber dem "ID" -Weg?
Sie verwechseln einen Schlüsselnamen mit dem stringifizierten Schlüssel. Sie sind anders. Der Name eines Schlüssels ist etwas, das Sie einer Entität über die reservierte Eigenschaft key_name zum Zeitpunkt der Erstellung geben. Wenn Sie dies nicht tun, generiert das System eine ID. Ein Entitätsschlüssel kann entweder einen Namen oder eine ID haben, aber nicht beides.
Wenn Sie einen Schlüssel absichtlich mit einem String versehen haben, stellen Sie ihn wieder her, indem Sie ihn an den Key-Konstruktor zurückgeben.
%Vor%Angenommen, Sie meinten wirklich name vs. id, dann ist es eine Frage von dem, was bequemer ist. Jeder Leistungsunterschied wird mikroskopisch sein.
Was Sie erhalten, ist eine Schlüsselzeichenfolge, nicht ein Schlüsselname. Wenn Sie ein Objekt aus seiner Schlüsselzeichenfolge abrufen möchten. Dann verwendest du Model.get(keystring)
. Key_name ist, was Sie einem Objekt zuweisen, das eindeutig sein soll. Wenn Sie der Meinung sind, dass Sie ein beliebiges Attribut verwenden können, das eindeutig ist, können Sie es als Schlüsselname verwenden, andernfalls wählen Sie die standardmäßig generierte ID. Das einzige, was Sie bei der Verwendung eines Schlüsselnamens bekommen, ist get_or_insert()
, das eine Entität zurückgibt, wenn eine Entität mit diesem Schlüsselnamen existiert, andernfalls erzeugt sie eine und gibt sie zurück.
Tags und Links python google-app-engine