Entitäten erstellen, abrufen, aktualisieren und löschen

Datenobjekte in Cloud Datastore werden als Entitäten bezeichnet. Jede Entität wird für Abfragen einem bestimmten Typ zugewiesen. Wenn Sie beispielsweise eine Personalanwendung schreiben, können Sie jeden Mitarbeiter mit einer Entität des Typs Employee darstellen. Beachten Sie, dass die Entitätendatenwerte in Form von Properties vorliegen. Weitere Informationen zu Entitäten erhalten Sie in der Dokumentation zu Ancestor-Pfaden und Transaktionen.

Entitäten erstellen und Properties festlegen

Sie können eine Entität durch Aufruf der Konstruktormethode für ihre Modellklasse erstellen und festlegen. Weitere Informationen zum Erstellen einer Modellklasse für Entitäten finden Sie unter Modellklassen für Entitäten erstellen und verwenden.

Im folgenden Beispiel sehen Sie, wie ein Modellklassenkonstruktor mit Schlüsselwortargumenten aufgerufen wird:

sandy = Account(
    username='Sandy', userid=123, email='sandy@example.com')

Mit diesem Code wird im Hauptspeicher Ihres Programms ein Objekt erstellt. Die Entität ist nicht mehr vorhanden, wenn der Prozess beendet wird. Sie müssen die Entität daher auch in Cloud Datastore speichern. Rufen Sie dazu put() auf:

sandy_key = sandy.put()

So wird ein Schlüssel zurückgegeben, mit dem Sie später die Entität aus Cloud Datastore abrufen können.

Sie müssen keine Properties im Konstruktor festlegen. Sie können allerdings mit einer dieser Optionen Properties in der folgenden Tabelle festlegen:

Konstruktor verwenden

Sie können die Properties der Entität mit Schlüsselwortargumenten für den Konstruktor angeben:

sandy = Account(
    username='Sandy', userid=123, email='sandy@example.com')

Manuell nach dem Erstellen festlegen

Sie können Properties manuell nach dem Erstellen der Entität festlegen:

sandy = Account()
sandy.username = 'Sandy'
sandy.userid = 123
sandy.email = 'sandy@example.com'

"populate()" verwenden

Sie können die praktische Methode populate() verwenden, wenn Sie mehrere Properties in einem Vorgang festlegen möchten:

sandy = Account()
sandy.populate(
    username='Sandy',
    userid=123,
    email='sandy@gmail.com')

Wenn Sie allerdings die Properties der Entität festlegen, wird in diesem Fall von den Property-Typen StringProperty und IntegerProperty die Typprüfung erzwungen.

Beispiel:

bad = Account(
    username='Sandy', userid='not integer')  # raises an exception
...
sandy.username = 42  # raises an exception

Entitäten mit Schlüsseln abrufen

Wenn Sie den Schlüssel einer Entität haben, können Sie die Entität aus Cloud Datastore abrufen:

sandy = sandy_key.get()

Mit den Schlüsselmethoden kind() und id() werden Art und Kennzeichnung der Entität über den Schlüssel wiederhergestellt:

kind_string = sandy_key.kind()  # returns 'Account'
ident = sandy_key.id()  # returns '2'

Sie können mit dem Schlüssel einer Entität auch einen codierten String abrufen, der zum Einbetten in eine URL geeignet ist:

url_string = sandy_key.urlsafe()

Dies führt zu einem Ergebnis wie agVoZWxsb3IPCxIHQWNjb3VudBiZiwIM, mit dem Sie den Schlüssel später rekonstruieren und die ursprüngliche Entität abrufen können:

sandy_key = ndb.Key(urlsafe=url_string)
sandy = sandy_key.get()

Der URL-sichere Schlüssel wirkt verschlüsselt, was jedoch nicht der Fall ist. Er lässt sich einfach entschlüsseln, um die Art und Kennung der ursprünglichen Entität wiederherzustellen.

key = Key(urlsafe=url_string)
kind_string = key.kind()
ident = key.id()

Wenn Sie solche URL-sicheren Schlüssel verwenden, sollten Sie keine vertraulichen Daten wie E-Mail-Adressen als Entitätenkennungen nutzen. Es wäre beispielsweise möglich, einen Hash der vertraulichen Daten als Kennung zu verwenden. So wird verhindert, dass Dritte, die die verschlüsselten Schlüssel sehen, E-Mail-Adressen erheben können. Sie können jedoch eigenständig einen eigenen Hash einer bekannten E-Mail-Adresse generieren und damit überprüfen, ob diese Adresse in Cloud Datastore vorhanden ist.

Entitäten aktualisieren

Wenn Sie eine vorhandene Entität aktualisieren möchten, rufen Sie sie aus Cloud Datastore ab, ändern Sie ihre Properties und speichern Sie sie noch einmal:

sandy = key.get()
sandy.email = 'sandy@example.co.uk'
sandy.put()

Sie können den von put() zurückgegebenen Wert in diesem Fall ignorieren, da sich ein Entitätenschlüssel nicht ändert, wenn er aktualisiert wird.

Entitäten löschen

Wenn eine Entität nicht mehr benötigt wird, können Sie sie mit der delete()-Methode des Schlüssels aus Cloud Datastore entfernen:

sandy.key.delete()

Dies ist ein Vorgang mit dem Schlüssel, nicht mit der Entität selbst. Es wird immer None zurückgegeben.

Entitäten zusammengefasst löschen

In der GCP Console können Sie alle Entitäten eines bestimmten Typs oder alle Entitäten aller Typen im Standard-Namespace löschen:

  1. Rufen Sie die Cloud Datastore-Admin-Seite auf.
    Cloud Datastore-Admin-Seite aufrufen
  2. Wenn Sie die Cloud Datastore-Funktion "Admin" nicht bereits aktiviert haben, klicken Sie auf Datastore Admin aktivieren.
  3. Wählen Sie den Entitätstyp oder die Entitätstypen aus, den bzw. die Sie löschen möchten.
  4. Klicken Sie auf Entitäten löschen. Das Löschen von Entitäten findet zusammengefasst in Ihrer Anwendung statt und wird somit auf Ihr Kontingent angerechnet.

Batchvorgänge verwenden

Sie können eine Sammlung von Entitäten oder Schlüsseln in einem einzelnen Aufruf verarbeiten, z. B. in einer Schleife. Die Verarbeitung in einzelnen Aufrufen ist nicht erforderlich. Dies führt zu einem einzelnen Remoteprozeduraufruf (RPC) und nicht zu einem separaten RPC-Aufruf für jede Entität.

Sie sehen an dem folgenden Code, wie es geht:

list_of_keys = ndb.put_multi(list_of_entities)
list_of_entities = ndb.get_multi(list_of_keys)
ndb.delete_multi(list_of_keys)

Im Code oben übergeben Sie eine Liste von Schlüsselobjekten an ndb.get_multi, um mehrere Entitäten in einem Batch abzurufen. ndb.get_multi gibt eine Liste von Entitätsobjekten mit None-Werten für Schlüssel zurück, für die in Cloud Datastore keine entsprechende Entität vorhanden ist. Wenn Entitäten so abgerufen werden, führt dies zu weniger Aufrufen von Cloud Datastore für den gesamten Batch. Die Anzahl der Anrufe pro Batch hängt von Ihren Einstellungen für die Batchgröße ab.

Hat Ihnen diese Seite weitergeholfen? Teilen Sie uns Ihr Feedback mit:

Feedback geben zu...

App Engine-Standardumgebung für Python 2