Jede Entität wird durch einen Schlüssel identifiziert, der innerhalb der Datastore-Instanz der Anwendung eindeutig ist und aus folgenden Elementen besteht:
- Art: Die Art ist normalerweise der Name der Modellklasse, zu der die Entität gehört. Sie können dies jedoch in einen anderen String ändern, indem Sie die Klassenmethode
_get_kind()
überschreiben. - Kennung: Sie geben Ihren eigenen Schlüsselnamen als Kennung an oder lassen Cloud Datastore automatisch eine ganzzahlige numerische ID generieren.
Eigenen Schlüsselnamen angeben
Im folgenden Beispiel wird implizit ein Schlüssel mit einer Stringkennung unter Verwendung des benannten Parameters id
erstellt:
Sie könnten alternativ den Schlüsselnamen direkt festlegen:
ID für den Schlüssel in Datastore generieren lassen
Dieser Code zeigt, wie Sie eine automatisch generierte ID als Schlüssel verwenden können:
Ancestor-Pfad im Schlüssel verwenden
Die Abfolge der Entitäten von einer Stammentität über die übergeordneten und untergeordneten Elemente bis zu einer bestimmten Entität bildet den Ancestor-Pfad. Die übergeordnete Entität einer Entität, die übergeordnete Entität der übergeordneten Entität und so weiter sind deren Ancestors. Die Entitäten im Datastore bilden einen hierarchischen Schlüsselbereich, der der hierarchischen Verzeichnisstruktur eines Dateisystems ähnelt.
Der vollständige Schlüssel, der die Entität identifiziert, besteht aus einer Abfolge von Art/Kennungs-Paaren, die deren Ancestor-Pfad angeben und mit den Paaren der Entität selbst enden: Die Konstruktormethode für die Klasse Key
akzeptiert eine Folge aus Arten und Kennungen und gibt ein Objekt zurück, das den Schlüssel für die entsprechende Entität darstellt.
Das folgende Beispiel zeigt einen Blogdienst, der Nachrichten nach Revision speichert. Nachrichten sind unter Konten organisiert und Revisionen unter Nachrichten.
...
Im Beispiel sind ('Account', 'sandy@example.com')
, ('Message', 123)
und ('Revision', '1')
Beispiele für Art/Kennungs-Paare.
Beachten Sie, dass Message
keine Modellklasse ist. Sie dient nur zur Gruppierung von Revisionen und nicht zum Speichern von Daten.
Wie im Beispielcode gezeigt, wird die Art der Entität durch das letzte Art/Namens-Paar in der Liste angegeben: ndb.Key('Revision', '1')
.
Benannte Parameter verwenden
Sie können den benannten Parameter parent
verwenden, um eine Entität direkt im Ancestor-Pfad anzugeben. Alle folgenden Notationen stellen denselben Schlüssel dar:
Stammentität angeben
Bei einer Stammentität ist der Ancestor-Pfad leer und der Schlüssel besteht ausschließlich aus der eigenen Art und der eigenen Kennung der Entität:
Entität mit Ancestors angeben
So fügen Sie eine neue Nachricht mit übergeordneten Schlüsseln ein:
Für Schlüssel, die mit einem übergeordneten Element erstellt wurden, gibt die Methode parent()
einen Schlüssel zurück, der die übergeordnete Entität darstellt:
Numerische Schlüssel-IDs verwenden
Sie können eine Entität erstellen, ohne eine ID anzugeben. In diesem Fall generiert der Datenspeicher automatisch eine numerische ID. Wenn Sie einige IDs selbst angeben und andere IDs von Datastore automatisch generieren lassen, ist die Anforderung der Eindeutigkeit bei den Schlüsseln möglicherweise nicht erfüllt. Reservieren Sie einen Nummernbereich, den Sie für die Auswahl von IDs nutzen können, oder verwenden Sie String-IDs, um dieses Problem ganz zu vermeiden.
Verwenden Sie die Klassenmethode allocate_ids()
der Modellklasse, um einen ID-Bereich zu reservieren:
- eine bestimmte Anzahl von IDs zuordnen
- alle IDs bis zu einem bestimmten Maximalwert zuordnen
IDs zuordnen
So weisen Sie 100 IDs für eine bestimmte Modellklasse MyModel
zu:
So weisen Sie 100 IDs für Entitäten mit dem übergeordneten Schlüssel p
zu:
Die zurückgegebenen Werte first
und last
sind jeweils die ersten und letzten zugewiesenen IDs (einschließlich). Damit können Sie Schlüssel so konstruieren:
Diese Schlüssel werden garantiert nicht vom internen ID-Generator des Datenspeichers oder zukünftigen Aufrufen an den internen ID-Generator zurückgegeben. Die Methode allocate_ids()
prüft jedoch nicht, ob die zurückgegebenen IDs im Datenspeicher vorhanden sind. Sie interagiert nur mit dem ID-Generator.
So weisen Sie alle IDs bis zu einem bestimmten Maximalwert zu:
Dieses Formular sorgt dafür, dass alle IDs kleiner oder gleich N
als zugewiesen gelten. Die Rückgabewerte first
und last
geben den Bereich der von diesem Vorgang reservierten IDs an. Es ist kein Fehler, die bereits zugewiesenen IDs zu reservieren. In diesem Fall gibt first
die erste ID an, die noch nicht zugewiesen wurde, und last
die letzte zugewiesene ID.