Modul google.appengine.ext.ndb.model

Übersicht

Modell- und Property-Klassen sowie zugehörige Elemente.

Eine Modellklasse stellt die Struktur der im Datenspeicher enthaltenen Entitäten dar. Anwendungen definieren Modellklassen, um die Struktur ihrer Entitäten anzugeben. Diese Modellklassen werden dann zum Erstellen von Entitäten verwendet.

Alle Modellklassen müssen dem Modell direkt oder indirekt untergeordnet sein. Einfache Zuweisungen in der Modellklassendefinition können dazu verwendet werden, die Struktur des Modells zu deklarieren:

class Person(Model):
  name = StringProperty()
  age = IntegerProperty()

Sie können jetzt eine Personenentität erstellen und in Cloud Datastore schreiben:

p = Person(name='Arthur Dent', age=42)
k = p.put()

Der Rückgabewert von put() ist ein Schlüssel, mit dem später dieselbe Entität abgerufen werden kann (siehe Dokumentation für ndb/key.py):

p2 = k.get()
p2 == p  # Returns True

Wenn Sie ein Objekt aktualisieren möchten, ändern Sie einfach dessen Attribute und schreiben Sie es zurück. Der Schlüssel wird hierdurch nicht geändert:

p2.name = 'Arthur Philip Dent'
p2.put()

Sie können auch eine Entität mit dem Schlüssel löschen:

k.delete()

Die Property-Definitionen im Klassentext teilen dem System die Namen und Typen der Felder mit, die in Cloud Datastore gespeichert werden sollen, ihren Standardwert sowie weitere Informationen. Außerdem wird festgelegt, ob sie indexiert werden müssen.

Es gibt viele verschiedene Property-Typen. Die meisten werden standardmäßig indexiert. Ausnahmen:

  • StringProperty: Ein kurzer Textstring, höchstens 500 Byte

  • TextProperty: Ein unbegrenzter Textstring, nicht indexiert

  • BlobProperty: Ein unbegrenzter Bytestring, nicht indexiert

  • IntegerProperty: Eine vorzeichenbehaftete 64-Bit-Ganzzahl

  • FloatProperty: Eine Gleitkommazahl mit doppelter Precision

  • BooleanProperty: Ein boolescher Wert

  • DateTimeProperty: Ein "datetime"-Objekt Hinweis: In App Engine wird immer UTC als Zeitzone verwendet.

  • DateProperty: Ein "date"-Objekt

  • TimeProperty: Ein "time"-Objekt

  • GeoPtProperty: Ein Standort, d. h. Breitengrad, Längengrad

  • KeyProperty: Ein Cloud Datastore-Schlüsselwert, optional darauf beschränkt, auf einen bestimmten Typ zu verweisen

  • UserProperty: Ein "User"-Objekt (nur für Abwärtskompatibilität)

  • StructuredProperty: Ein Feld, das wie eine Entität strukturiert ist (siehe unten für weitere Informationen).

  • LocalStructuredProperty: Wie StructuredProperty, doch die Darstellung auf dem Datenträger ist ein intransparentes Blob, nicht indexiert.

  • ComputedProperty: Eine Property, deren Wert anhand einer benutzerdefinierten Funktion aus anderen Properties abgeleitet wird. Der Property-Wert wird in Cloud Datastore geschrieben, damit er in Abfragen verwendet werden kann. Der Wert aus Cloud Datastore wird nicht verwendet, wenn die Entität zurückgelesen wird.

  • GenericProperty: Eine Property, deren Typ nicht beschränkt ist. Wird meistens von der Expando-Klasse verwendet (siehe unten), kann aber auch explizit genutzt werden.

  • JsonProperty: Eine Property, deren Wert ein beliebiges Objekt ist, das mit JSON serialisiert werden kann. Der Wert, der in Cloud Datastore geschrieben wird, ist eine JSON-Darstellung dieses Objekts.

  • PickleProperty: Eine Property, deren Wert ein beliebiges Objekt ist, das mit dem Pickle-Protokoll von Python serialisiert werden kann. Der Wert, der in Cloud Datastore geschrieben wird, ist die gepickelte Darstellung dieses Objekts. Dabei wird das höchste verfügbare Pickle-Protokoll verwendet.

Die meisten Property-Klassen haben ähnliche Konstruktorsignaturen. Sie akzeptieren mehrere optionale Schlüsselwortargumente:

  • name=<string>: Der Name, mit dem der Property-Wert im Datenspeicher gespeichert wird. Im Gegensatz zu den folgenden Optionen kann dieses Element auch als Positionsargument angegeben werden.

  • indexed=<bool>: Gibt an, ob die Property indexiert werden sollte (ermöglicht Abfragen zum Wert der Property).

  • repeated=<bool>: Gibt an, dass diese Property mehrere Werte in derselben Entität haben kann.

  • write_empty_list<bool>: Steuert bei wiederkehrenden Wert-Properties, ob Properties ohne Elemente (die leere Liste) in Cloud Datastore geschrieben werden. Bei "true" werden sie in Cloud Datastore geschrieben, bei "false" wird nichts geschrieben.

  • required=<bool>: Gibt an, dass für diese Property ein Wert angegeben werden muss.

  • default=<value>: Ein Standardwert, wenn kein expliziter Wert angegeben wird.

  • choices=<list of values>: Eine Liste oder ein Tupel zulässiger Werte.

  • validator=<function>: Eine allgemeine Validierungsfunktion. Sie wird mit zwei Argumenten (prop, value) aufgerufen und sollte entweder den validierten Wert zurückgeben oder eine Ausnahme auslösen. Es ist außerdem zulässig, dass der Wert durch die Funktion geändert wird. Wird sie noch einmal mit geändertem Wert aufgerufen, sollte dieser jedoch nicht weiter angepasst werden. Beispiel: Wird bei einer Validierung "value.strip()" oder "value.lower()" zurückgegeben, so ist dies in Ordnung. Wird jedoch "value + '$'" zurückgegeben, so ist dies nicht in Ordnung.

  • verbose_name=<value>: Ein menschenlesbarer Name für diese Property. Dieser kann für HTML-Formularlabels verwendet werden.

Die Optionen "Wiederkehrend" und "Erforderlich/Standard" schließen sich gegenseitig aus: Eine wiederkehrende Property kann weder erforderlich sein noch einen Standardwert angeben. Dieser ist immer eine leere Liste und eine leere Liste ist immer ein zulässiger Wert. Eine erforderliche Property kann allerdings einen Standardwert haben.

Einige Property-Typen haben zusätzliche Argumente und unterstützen nicht alle Optionen.

Wiederkehrende Properties werden immer als Python-Listen dargestellt. Wenn es nur einen Wert gibt, hat die Liste nur ein Element. Wird einer wiederkehrenden Property eine neue Liste zugewiesen, werden alle Elemente der Liste überprüft. Da es auch möglich ist, vorhandene Listen zu mutieren, werden wiederkehrende Properties neu validiert, bevor sie in den Datenspeicher geschrieben werden.

Wenn eine Entität aus Cloud Datastore gelesen wird, findet keine Validierung statt. Gelesene Property-Werte mit falschem Typ, z. B. mit einem Stringwert für eine IntegerProperty, werden ignoriert.

Für nicht wiederkehrende Properties ist "None" immer ein möglicher Wert. Es wird keine Validierung durchgeführt, wenn der Wert "None" festgelegt wurde. Bei erforderlichen Properties ist für das Schreiben der Entität in Cloud Datastore erforderlich, dass der Wert nicht "None" und gültig ist.

Die StructuredProperty unterscheidet sich von den meisten anderen Properties und Sie haben die Möglichkeit, eine Unterstruktur für Ihre Entitäten zu definieren. Die Unterstruktur selbst wird mit einer Modellklasse definiert und der Attributwert ist eine Instanz dieser Modellklasse. Sie wird jedoch nicht als separate Entität im Datenspeicher gespeichert. Stattdessen werden die Attributwerte mithilfe einer Namenskonvention (Name des strukturierten Attributs, gefolgt von einem Punkt und dem Namen des Unterattributs) der übergeordneten Entität hinzugefügt. Beispiel:

class Address(Model):
  street = StringProperty()
  city = StringProperty()

class Person(Model):
  name = StringProperty()
  address = StructuredProperty(Address)

p = Person(name='Harry Potter',
           address=Address(street='4 Privet Drive',
                           city='Little Whinging'))
k.put()

So würde eine einzelne "Person"-Entität mit drei Attributen geschrieben. Dies können Sie in der Admin-Konsole mit dem Cloud Datastore-Betrachter überprüfen:

name = 'Harry Potter'
address.street = '4 Privet Drive'
address.city = 'Little Whinging'

Strukturierte Property-Typen können beliebig tief verschachtelt werden. Doch in einer Hierarchie verschachtelter strukturierter Property-Typen kann nur für eine Ebene das wiederkehrende Flag festgelegt werden. Es ist möglich, dass mehrere strukturierte Properties auf dieselbe Modellklasse verweisen.

Das Gleiche gilt für die Nutzung derselben Modellklasse als Entitätsklasse auf oberster Ebene und als strukturierte Property. Bei Abfragen für die Modellklasse werden jedoch nur die Entitäten auf oberster Ebene zurückgegeben.

Die LocalStructuredProperty funktioniert ähnlich wie die StructuredProperty auf Python-Seite. Beispiel:

class Address(Model):
  street = StringProperty()
  city = StringProperty()

class Person(Model):
  name = StringProperty()
  address = LocalStructuredProperty(Address)

p = Person(name='Harry Potter',
           address=Address(street='4 Privet Drive',
                           city='Little Whinging'))
k.put()

Die in Cloud Datastore geschriebenen Daten sind jedoch anders. Hier wird wie zuvor eine "Person"-Entität mit einem "name"-Attribut sowie ein einzelnes "address"-Attribut geschrieben. Dessen Wert ist ein Blob, das mit der standardmäßigen "Protokollpuffer"-Codierung den "address"-Wert codiert.

Manchmal sind die Properties nicht vorher bekannt. Dann können Sie die Expando-Klasse verwenden. Dies ist eine Modellunterklasse, in der Properties sowohl beim Zuweisen als auch beim Laden einer Entität aus Cloud Datastore im laufenden Betrieb erstellt werden. Beispiel:

class SuperPerson(Expando):
  name = StringProperty()
  superpower = StringProperty()

razorgirl = SuperPerson(name='Molly Millions',
                        superpower='bionic eyes, razorblade hands',
                        rasta_name='Steppin' Razor',
                        alt_name='Sally Shears')
elastigirl = SuperPerson(name='Helen Parr',
                         superpower='stretchable body')
elastigirl.max_stretch = 30  # Meters

Sie können die Properties einer Expando-Instanz mit dem Attribut "_properties" überprüfen:

>>> print razorgirl._properties.keys() ['rasta_name', 'name', 'superpower', 'alt_name'] >>> print elastigirl._properties {'max_stretch': GenericProperty('max_stretch'), 'name': StringProperty('name'), 'superpower': StringProperty('superpower')}

Hinweis: Diese Property existiert auch für reine Modellinstanzen. Für diese ist sie jedoch nicht so relevant.

Die Modellklasse bietet einfachen Abfragesupport. Sie können ein "Query"-Objekt erstellen, indem Sie die Klassenmethode "query()" aufrufen. Beim Iterieren über ein "Query"-Objekt werden die Entitäten zurückgegeben, die jeweils mit der Abfrage übereinstimmen.

"Query"-Objekte sind vollständig im Modul "docstring" für query.py beschrieben. Es gibt jedoch eine praktische Verknüpfung, die nur über "Model.query()" verfügbar ist: Positionsargumente werden als Filterausdrücke interpretiert, die durch einen "AND"-Operator kombiniert werden. Beispiel:

Person.query(Person.name == 'Harry Potter', Person.age >= 11)

entspricht:

Person.query().filter(Person.name == 'Harry Potter', Person.age >= 11)

Schlüsselwortargumente, die an ".query()" übergeben wurden, werden an den "Query()"-Konstruktor weitergeleitet.

Feldwerte von strukturierten Properties können abgefragt werden. Beispiel:

qry = Person.query(Person.address.city == 'London')

In diesem Modul gibt es außerdem eine Reihe von Funktionen auf oberster Ebene:

  • transaction(): Führt eine Funktion in einer Transaktion aus

  • get_multi(): Liest mehrere Entitäten gleichzeitig

  • put_multi(): Schreibt mehrere Entitäten gleichzeitig

  • delete_multi(): Löscht mehrere Objekte gleichzeitig

Alle genannten Funktionen haben auch eine entsprechende "*_async()"-Variante. Die "*_multi_async()"-Funktionen geben eine Liste mit Futures zurück.

Und schließlich diese Funktionen ohne asynchrone Varianten:

  • in_transaction(): Testet, ob Sie momentan eine Transaktion ausführen.

  • @transactional: Dekoriert Funktionen, die in einer Transaktion ausgeführt werden sollten.

Es gibt viele andere interessante Funktionen. Modellunterklassen können beispielsweise Hooks definieren, die vor und nach dem Aufruf für die meisten Vorgänge ("get", "put", "delete", "allocate_ids") ausgeführt werden. Außerdem besteht die Möglichkeit, dass Property-Klassen abgeleitet werden, um sie an Anforderungen anzupassen. Die Dokumentation für das Schreiben einer Property-Unterklasse finden Sie im Modul "docstring" für die Property-Klasse.

Inhalt

Klasse google.appengine.ext.ndb.model.KeyQuelle

Basiert auf: object

Ein unveränderlicher Datenspeicherschlüssel

Aus Gründen der Flexibilität und Benutzerfreundlichkeit werden mehrere Konstruktorsignaturen unterstützt.

Die gängigste Methode zum Erstellen eines Schlüssels sind Positionsargumente: - Key(kind1, id1, kind2, id2, …)

Dies ist die Kurzschreibweise für eine der beiden längeren Formen: - Key(pairs=[(kind1, id1), (kind2, id2), …]) - Key(flat=[kind1, id1, kind2, id2, …])

Jede der oben genannten Konstruktorformen kann mit "parent=<key>" zusätzlich einen weiteren Schlüssel übergeben. Die (kind, id)-Paare des übergeordneten Schlüssels werden vor den explizit übergebenen (kind, id)-Paaren eingefügt.

Sie können auch einen Schlüssel aus einem URL-sicheren Codierstring erstellen: - Key(urlsafe=<string>)

Fortgeschrittene können sich folgender Konstruktoren bedienen: - Key(reference=<reference>): Übergibt ein untergeordnetes Referenzobjekt - Key(serialized=<string>): Übergibt ein serialisiertes untergeordnetes Referenzobjekt - Key(<dict>): Für das Unpickling mit Key(**<dict>) identisch

Der URL-sichere String ist in Wirklichkeit eine mit base64 websicher codierte, serialisierte Referenz. Betrachten Sie ihn jedoch einfach als einen undurchsichtigen eindeutigen String.

Weitere Schlüsselwortargumente für den Konstruktor: - app=<string>: Gibt die Anwendungs-ID an - namespace=<string>: Gibt den Namespace an

Wenn eine Referenz (mit "reference", "serialized" oder "urlsafe") übergeben wird, müssen die Argument- und Namespace-Schlüsselwörter mit denjenigen übereinstimmen, die bereits in der Referenz vorhanden sind (nach einer eventuellen Decodierung). Das übergeordnete Schlüsselwort kann in keiner Weise mit einer Referenz kombiniert werden.

Schlüssel sind unveränderlich. Dies bedeutet, dass ein einmal erstelltes Schlüsselobjekt nicht mehr geändert werden kann. Durchgesetzt wird dies durch die Implementierung sowie Python.

Für den Zugriff auf den Inhalt eines Schlüssels werden folgende Methoden und Vorgänge unterstützt:

  • repr(key), str(key): Gibt eine Stringdarstellung zurück, die der kürzesten Konstruktorschreibweise ähnelt, allerdings ohne Anwendung und Namespace, sofern diese nicht vom Standardwert abweichen

  • key1 == key2, key1 != key2 – Vergleich der Gleichheit zwischen Schlüsseln.

  • hash(key): Hash-Wert, der zum Speichern von Schlüsseln in einem Wörterbuch ausreicht

  • key.pairs(): Tupel von (kind, id)-Paaren

  • key.flat(): Tupel von vereinfachten Typ- und ID-Werten, also (kind1, id1, kind2, id2, …)

  • key.app(): Anwendungs-ID

  • key.id(): String- oder Ganzzahl-ID im letzten (kind, id)-Paar oder "None", falls der Schlüssel unvollständig ist

  • key.string_id(): String-ID im letzten (kind, id)-Paar oder "None", falls der Schlüssel eine Ganzzahl-ID hat oder unvollständig ist

  • key.integer_id(): Ganzzahl-ID im letzten (kind, id)-Paar oder "None", falls der Schlüssel eine String-ID hat oder unvollständig ist

  • key.namespace(): Namespace

  • key.kind(): Kurzschreibweise für key.pairs()[-1][0]

  • key.parent(): Schlüssel, der aus allen (kind, id)-Paaren bis auf das letzte erstellt wurde

  • key.urlsafe(): Mit base64 websicher codierte, serialisierte Referenz

  • key.serialized(): Serialisierte Referenz

  • key.reference(): Referenzobjekt, wobei Aufrufer zusichert, das Objekt nicht zu verändern

Schlüssel unterstützen auch die Interaktion mit dem Datenspeicher. Diese Methoden sind die einzigen, die an irgendeiner Art von E/A-Aktivität beteiligt sind. Informationen zu Future-Objekten finden Sie im Dokument zu "ndb/tasklets.py".

  • key.get(): Gibt die Entität für den Schlüssel zurück

  • key.get_async(): Gibt ein Future-Objekt zurück, dessen Endergebnis die Entität für den Schlüssel ist

  • key.delete(): Löscht die Entität für den Schlüssel

  • key.delete_async(): Löscht die Entität für den Schlüssel asynchron

Für Schlüssel kann ein Pickling ausgeführt werden.

Das Erstellen von abgeleiteten Klassen für Schlüssel sollte vermieden werden, da dies schwer zu bewerkstelligen ist.

app()Quelle

Gibt die Anwendungs-ID zurück

delete(**ctx_options)Quelle

Löscht die Entität für diesen Schlüssel synchron

Wenn eine solche Entität nicht existiert, ist dies ein Leerbefehl.

delete_async(**ctx_options)Quelle

Plant das Löschen der Entität für diesen Schlüssel

Gibt ein Future-Objekt zurück, dessen Ergebnis zur Verfügung steht, sobald der Löschvorgang abgeschlossen ist. Wenn eine solche Entität nicht existiert, wird dennoch ein Future-Objekt zurückgegeben. In allen Fällen ist das Ergebnis des Future-Objekts "None". Es kann also nicht festgestellt werden, ob die Entität existiert hat oder nicht.

flat()Quelle

Gibt ein Tupel alternierender Typ- und ID-Werte zurück

Klassenmethode from_old_key(old_key)Quelle
get(**ctx_options)Quelle

Ruft die Entität für diesen Schlüssel synchron ab

Gibt "None" zurück, wenn eine solche Entität nicht existiert

get_async(**ctx_options)Quelle

Gibt ein Future-Objekt zurück, dessen Ergebnis die Entität für diesen Schlüssel ist.

Wenn eine solche Entität nicht existiert, wird dennoch ein Future-Objekt zurückgegeben, dessen endgültiges Rückgabeergebnis "None" ist.

id()Quelle

Gibt die String- oder Ganzzahl-ID im letzten (kind, id)-Paar zurück, sofern vorhanden

Gibt Folgendes zurück:

Eine String- oder Ganzzahl-ID oder "None", wenn der Schlüssel unvollständig ist

integer_id()Quelle

Gibt die Ganzzahl-ID im letzten (kind, id)-Paar zurück, sofern vorhanden

Gibt Folgendes zurück:

Eine Ganzzahl-ID oder "None", wenn der Schlüssel eine String-ID hat oder unvollständig ist

kind()Quelle

Gibt den Typ der referenzierten Entität zurück.

Dies ist der Typ aus dem letzten (kind, id)-Paar.

namespace()Quelle

Gib den Namespace zurück

pairs()Quelle

Gibt ein Tupel von (kind, id)-Paaren zurück

parent()Quelle

Gibt einen Schlüssel zurück, der aus allen (kind, id)-Paaren bis auf das letzte erstellt wurde.

Wenn nur ein (kind, id)-Paar vorliegt, wird "None" zurückgegeben.

reference()Quelle

Gibt das Referenzobjekt für diesen Schlüssel zurück.

Dies ist eine entity_pb.Reference-Instanz – eine Protokollpufferklasse, die von der Low-Level API für den Datenspeicher verwendet wird.

HINWEIS: Der Aufrufer sollte den Rückgabewert nicht verändern.

root()Quelle

Gibt den Stammschlüssel zurück. Dies ist entweder das Element selbst oder das höchste übergeordnete Element.

serialized()Quelle

Gibt ein serialisiertes Referenzobjekt für diesen Schlüssel zurück

string_id()Quelle

Gibt die String-ID im letzten (kind, id)-Paar zurück, sofern vorhanden

Gibt Folgendes zurück:

Eine String-ID oder "None", wenn der Schlüssel eine Ganzzahl-ID hat oder unvollständig ist

to_old_key()Quelle
urlsafe()Quelle

Gibt einen URL-sicheren String zurück, der die Referenz dieses Schlüssels codiert

Dieser String ist mit anderen APIs und Sprachen sowie mit den Strings kompatibel, die zur Darstellung von Schlüsseln in GQL und in der Admin-Konsole von App Engine verwendet werden.

Klasse google.appengine.ext.ndb.model.BlobKey(blob_key)Quelle

Basiert auf: object

Schlüssel zum Identifizieren eines Blobs in Blobstore.

Dieses Objekt bettet einen String ein, der von der Blobstore API intern verwendet wird, um Anwendungs-Blobs zu identifizieren. Der BlobKey entspricht dem Entitätsnamen der zugrunde liegenden BlobReference-Entität.

Diese Klasse wird in der API sowohl in google.appengine.ext.db als auch in google.appengine.ext.blobstore zur Verfügung gestellt.

ToXml()source
Klasse google.appengine.ext.ndb.model.GeoPt(lat, lon=None)Quelle

Basiert auf: object

Ein geografischer Punkt, der durch Gleitkommakoordinaten für Breiten- und Längengrad angegeben ist. Häufig zur Integration mit Karten-Websites wie Google Maps verwendet. Kann auch als ICBM-Koordinaten verwendet werden.

Dies ist das Element "georss:point". In der XML-Ausgabe werden die Koordinaten als die Attribute "lat" und "lon" angegeben. Weitere Informationen erhalten Sie unter: http://georss.org/

Serialisiert zu ‘<lat>,<lon>’. Löst "BadValueError" aus, wenn ein ungültiger serialisierter String übergeben wurde oder wenn "lat" und "lon" keine gültigen Gleitkommazahlen in den Bereichen [-90, 90] bzw. [-180, 180] sind.

ToXml()source
lat = None
lon = None
Ausnahme google.appengine.ext.ndb.model.RollbackQuelle

Basis: google.appengine.api.datastore_errors.Error

Kann von Transaktionsfunktionen ausgelöst werden, wenn diese statt eines Commits einen Rollback ausführen möchten. Jede von einer Transaktionsfunktion ausgelöste Ausnahme führt zu einem Rollback. Dies hat rein praktische Gründe. Weitere Informationen finden Sie unter "datastore.RunInTransaction".

Klasse google.appengine.ext.ndb.model.IndexQuelle

Basis: google.appengine.ext.ndb.model._NotEqualMixin

Unveränderliches Objekt, das einen Index darstellt.

ancestor

Gibt an, ob es sich um einen Ancestor-Index handelt. Ein boolescher Wert.

kind

Die zu indexierende Art in Form eines Strings.

properties

Eine Liste von PropertyIndex-Objekten, die die zu indexierenden Properties enthält.

Klasse google.appengine.ext.ndb.model.IndexStateQuelle

Basis: google.appengine.ext.ndb.model._NotEqualMixin

Unveränderliches Objekt, das einen Index und seinen Status darstellt.

definition

Ein Indexobjekt, das den Index beschreibt.

id

Die Index-ID in Form einer Ganzzahl.

state

Der Indexstatus in Form eines Strings.

Mögliche Werte sind "error", "deleting", "serving" oder "building".

Klasse google.appengine.ext.ndb.model.IndexPropertyQuelle

Basis: google.appengine.ext.ndb.model._NotEqualMixin

Unveränderliches Objekt, das eine einzelne Property in einem Index darstellt.

direction

Die Richtung im Index für diese Property, "asc" oder "desc".

name

Der Name der zu indexierenden Property in Form eines Strings.

Klasse google.appengine.ext.ndb.model.ModelAdapter(default_model=None, id_resolver=None)Quelle

Basis: google.appengine.datastore.datastore_rpc.AbstractAdapter

Konvertierungen zwischen den vorliegenden Schlüssel- und Modellklassen und den Protokollpuffern.

Dies ist erforderlich, um ein Verbindungsobjekt zu erstellen, das wiederum zum Erstellen eines Kontextobjekts benötigt wird.

Weitere Informationen zu den Signaturen finden Sie unter der Basisklasse "docstring".

entity_to_pb(ent)source
key_to_pb(key)source
pb_to_entity(pb)Quelle
pb_to_index(pb)Quelle
pb_to_key(pb)source
Klasse google.appengine.ext.ndb.model.ModelAttributeQuelle

Basiert auf: object

Eine Basisklasse, die das Vorhandensein der Methode "_fix_up()" angibt.

Klasse google.appengine.ext.ndb.model.ModelKeyQuelle

Basiert auf: google.appengine.ext.ndb.model.Property

Spezielle Property zum Speichern des Modellschlüssels.

Klasse google.appengine.ext.ndb.model.MetaModel(name, bases, Klassedict)Quelle

Basiert auf: type

Metaklasse für das Modell.

Wird zum Aufbereiten der Properties benötigt, da sie ihren Namen kennen müssen. Hierfür wird die Klassenmethode "_fix_properties()" aufgerufen.

Klasse google.appengine.ext.ndb.model.Model(*args, **kwds)Quelle

Basis: google.appengine.ext.ndb.model._NotEqualMixin

Eine Klasse, die Cloud Datastore-Entitäten beschreibt.

Modellinstanzen werden in der Regel als Entitäten bezeichnet. Alle Modellklassen, die Elemente aus dem Modell übernehmen, haben automatisch "MetaModel" als Metaklasse, sodass die Properties nach dem Definieren der Klasse korrekt festgelegt werden können.

Daher können Sie mehrere Properties nicht mit demselben Property-Objekt beschreiben. Sie müssen ein eigenes Property-Objekt für jede Property erstellen. Der folgende Code funktioniert beispielsweise nicht:

wrong_prop = StringProperty()
class Wrong(Model):
  wrong1 = wrong_prop
  wrong2 = wrong_prop

Die Art entspricht normalerweise dem Klassennamen (ausschließlich des Modulnamens oder eines anderen übergeordneten Bereichs). Zum Überschreiben der Art wird eine Klassenmethode namens "_get_kind()" definiert:

class MyModel(Model):
  @classmethod
  def _get_kind(cls):
    return 'AnotherKind'
Klassenmethode allocate_ids(size=None, max=None, parent=None, **ctx_options)Quelle

Ordnet dieser Modellklasse einen Bereich von Schlüssel-IDs zu.

Parameter
  • size: Anzahl der zuzuordnenden IDs. Es kann entweder "size" oder "max" angegeben werden, nicht beides.

  • max: Die höchste zuzuordnende ID. Es kann entweder "size" oder "max" angegeben werden, nicht beides.

  • parent: Übergeordneter Schlüssel, für den die IDs zugeordnet werden.

  • **ctx_options: Kontextoptionen

Gibt Folgendes zurück:

Ein Tupel mit (start, end) für den zugeordneten Bereich (einschließlich)

Klassenmethode allocate_ids_async(size=None, max=None, parent=None, **ctx_options)Quelle

Ordnet dieser Modellklasse einen Bereich von Schlüssel-IDs zu.

Dies ist die asynchrone Version von "Model._allocate_ids()".

Klassenmethode get_by_id(*args, **kwds)Quelle

Gibt eine Instanz der Modellklasse nach ID zurück.

Dies ist nur eine Kurzschreibweise für "Key(cls, id, …).get()".

Parameter
  • id: Eine String- oder Ganzzahlschlüssel-ID

  • parent: Optionaler übergeordneter Schlüssel des Modells, das abgerufen werden soll

  • namespace: Optionaler Namespace

  • app: Optionale Anwendungs-ID

  • **ctx_options: Kontextoptionen

Gibt Folgendes zurück:

Eine Modellinstanz oder "None", falls keine gefunden wurde

Klassenmethode get_by_id_async(*args, **kwds)Quelle

Gibt eine Instanz der Modellklasse nach ID (und Anwendung, Namespace) zurück.

Dies ist die asynchrone Version von "Model._get_by_id()".

Klassenmethode get_or_insert(*args, **kwds)Quelle

Ruft eine vorhandene Entität transaktional ab oder erstellt eine neue.

Positionsargumente:

name: Schlüsselname, der abgerufen oder erstellt werden soll.

Schlüsselwortargumente
  • namespace: Optionaler Namespace

  • app: Optionale Anwendungs-ID

  • parent: Übergeordneter Entitätsschlüssel, sofern vorhanden.

  • context_options – ContextOptions-Objekt (keine Schlüsselwortargumente) oder "None".

  • **kwds: Schlüsselwortargumente, die an den Konstruktor der Modellklasse zu übergeben sind, wenn noch keine Instanz für den angegebenen Schlüsselnamen existiert. Ist eine Instanz mit dem angegebenen "key_name" und "parent" bereits vorhanden, werden diese Argumente verworfen.

Gibt Folgendes zurück:

Vorhandene Instanz der Modellklasse mit dem angegebenen Schlüsselnamen und übergeordneten Entitätsschlüssel oder eine neue Instanz, die gerade erstellt wurde

Klassenmethode get_or_insert_async(*args, **kwds)Quelle

Ruft eine vorhandene Entität transaktional ab oder erstellt eine neue.

Dies ist die asynchrone Version von "Model._get_or_insert()".

Klassenmethode gql(query_string, *args, **kwds)Quelle

Führt eine GQL-Abfrage aus.

has_complete_key()source

Gibt an, ob diese Entität einen vollständigen Schlüssel hat.

key

Spezielle Property zum Speichern des Modellschlüssels.

populate(**kwds)source

Füllt eine Instanz aus Schlüsselwortargumenten.

Jedes Schlüsselwortargument wird verwendet, um eine entsprechende Property festzulegen. Schlüsselwörter müssen auf gültige Property-Namen verweisen. Dies ist vergleichbar mit der Übergabe von Schlüsselwortargumenten an den Modellkonstruktor, allerdings werden "key", "id" und "parent" nicht bereitgestellt.

put(**ctx_options)source

Schreibt diese Entität in Cloud Datastore.

Wenn der Vorgang einen Schlüssel erstellt oder vervollständigt, wird das Schlüsselattribut der Entität auf den neuen vollständigen Schlüssel gesetzt.

Gibt Folgendes zurück:

Den Schlüssel für die Entität. Dies ist immer ein vollständiger Schlüssel.

put_async(**ctx_options)source

Schreibt diese Entität in Cloud Datastore.

Dies ist die asynchrone Version von "Model._put()".

Klassenmethode query(*args, **kwds)Quelle

Erstellt ein Abfrageobjekt für diese Klasse.

Parameter
  • distinct: Optionaler boolescher Wert, Kurzschreibweise für "group_by = projection"

  • *args: Wird verwendet, um einen anfänglichen Filter anzuwenden

  • **kwds: Werden an den Query()-Konstruktor übergeben

Gibt Folgendes zurück:

Ein Abfrageobjekt

to_dict(*args, **kwds)source

Gibt ein Dictionary zurück, das die Property-Werte der Entität enthält.

Parameter
  • include: Optionaler Satz von Property-Namen, die eingeschlossen werden sollen. Der Standardwert ist "all".

  • exclude: Optionaler Satz von Property-Namen, die übersprungen werden sollen. Der Standardwert ist "None". Ein Name, der sowohl in "include" als auch in "exclude" enthalten ist, wird ausgeschlossen.

Klasse google.appengine.ext.ndb.model.Expando(*args, **kwds)Quelle

Basis: google.appengine.ext.ndb.model.Model

Abgeleitete Modellklasse zur Unterstützung dynamischer Property-Namen und -Typen.

Weitere Informationen erhalten Sie im Modul "docstring".

google.appengine.ext.ndb.model.transaction(*args, **kwds)source

Führt einen Callback in einer Transaktion aus.

Parameter
  • callback: Eine aufzurufende Funktion oder ein aufzurufendes Tasklet

  • **ctx_options: Transaktionsoptionen

Nützliche Optionen:

retries=N: Wiederholt den Vorgang bis zu N-mal (also N + 1 Wiederholungen). propagation=<flag>: Bestimmt, wie eine vorhandene Transaktion

weitergegeben, wobei <flag> einer der folgenden sein kann: TransactionOptions.NESTED: Startet eine verschachtelte Transaktion (dies ist die

Standardeinstellung. Allerdings sind verschachtelte Transaktionen derzeit noch nicht implementiert, sodass Sie diese Option nur außerhalb einer vorhandenen Transaktion verwenden können.

TransactionOptions.MANDATORY: Eine Transaktion muss sich bereits in Ausführung befinden. TransactionOptions.ALLOWED: Wenn eine Transaktion bereits läuft, wird sie einbezogen. TransactionOptions.INDEPENDENT: Startet immer eine neue parallele Transaktion.

xg=True: Aktiviert im High Replication-Datenspeicher gruppenübergreifende

Transaktionen, sodass in maximal fünf Entitätengruppen geschrieben werden kann.

read_only=True: Gibt an, dass eine Transaktion keine Schreibvorgänge ausführt, was

den Durchsatz potenziell erhöhen kann.

WARNUNG: Die Verwendung eines anderen Weitergabe-Flags als NESTED kann ungewöhnliche Folgen haben. Wenn Sie ALLOWED oder MANDATORY verwenden und eine Ausnahme ausgelöst wird, ist die Wahrscheinlichkeit groß, dass ein Commit der Transaktion nicht sicher ausgeführt werden kann. Bei Verwendung von INDEPENDENT ist die Rückgabe von gelesenen Werten an den Aufrufer generell unsicher, da die Werte nicht in der Transaktion des Aufrufers gelesen wurden.

Gibt Folgendes zurück:

Alles, was "callback()" zurückgibt

Löst aus
  • Was immer callback() auslöst; datastore_errors.TransactionFailedError

  • "datastore_errors.TransactionFailedError", falls die Transaktion fehlgeschlagen ist

google.appengine.ext.ndb.model.transaction_async(*args, **kwds)source

Führt einen Callback in einer Transaktion aus.

Dies ist die asynchrone Version von "transaction()".

google.appengine.ext.ndb.model.in_transaction()source

Gibt an, ob eine Transaktion gerade aktiv ist.

google.appengine.ext.ndb.model.transactional(_func=None, **options)source
google.appengine.ext.ndb.model.transactional_async(_func=None, **options)source
google.appengine.ext.ndb.model.transactional_tasklet(_func=None, **options)source
google.appengine.ext.ndb.model.non_transactional(_func=None, **options)source
google.appengine.ext.ndb.model.get_multi(keys, **ctx_options)source

Ruft eine Abfolge von Schlüsseln ab.

Parameter
  • keys: Eine Abfolge von Schlüsseln

  • **ctx_options: Kontextoptionen

Gibt Folgendes zurück:

Eine Liste mit Modellinstanzen oder "None", falls der Schlüssel nicht gefunden wurde

google.appengine.ext.ndb.model.get_multi_async(keys, **ctx_options)source

Ruft eine Abfolge von Schlüsseln ab.

Parameter
  • keys: Eine Abfolge von Schlüsseln

  • **ctx_options: Kontextoptionen

Gibt Folgendes zurück:

Eine Liste von Futures

google.appengine.ext.ndb.model.put_multi(entities, **ctx_options)source

Speichert eine Abfolge von Modellinstanzen.

Parameter
  • entities: Eine Abfolge von Modellinstanzen

  • **ctx_options: Kontextoptionen

Gibt Folgendes zurück:

Eine Liste mit den gespeicherten Schlüsseln

google.appengine.ext.ndb.model.put_multi_async(entities, **ctx_options)source

Speichert eine Abfolge von Modellinstanzen.

Parameter
  • entities: Eine Abfolge von Modellinstanzen

  • **ctx_options: Kontextoptionen

Gibt Folgendes zurück:

Eine Liste von Futures

google.appengine.ext.ndb.model.delete_multi(keys, **ctx_options)source

Löscht eine Abfolge von Schlüsseln.

Parameter
  • keys: Eine Abfolge von Schlüsseln

  • **ctx_options: Kontextoptionen

Gibt Folgendes zurück:

Eine Liste, deren Elemente alle "None" sind, jeweils ein "None" pro gelöschtem Schlüssel

google.appengine.ext.ndb.model.delete_multi_async(keys, **ctx_options)source

Löscht eine Abfolge von Schlüsseln.

Parameter
  • keys: Eine Abfolge von Schlüsseln

  • **ctx_options: Kontextoptionen

Gibt Folgendes zurück:

Eine Liste von Futures

google.appengine.ext.ndb.model.get_indexes(**ctx_options)source

Ruft eine Datenstruktur ab, die die konfigurierten Indexe darstellt.

Parameter

**ctx_options: Kontextoptionen

Gibt Folgendes zurück:

Eine Liste von "Index"-Objekten

google.appengine.ext.ndb.model.get_indexes_async(**ctx_options)source

Ruft eine Datenstruktur ab, die die konfigurierten Indexe darstellt.

Parameter

**ctx_options: Kontextoptionen

Gibt Folgendes zurück:

Ein Future

google.appengine.ext.ndb.model.make_connection(config=None, default_model=None, _api_version=u'datastore_v3', _id_resolver=None)Quelle

Erstellt ein neues Verbindungsobjekt mit dem richtigen Adapter.

Optional können Sie ein datastore_rpc.Configuration-Objekt übergeben.

Klasse google.appengine.ext.ndb.model.BlobProperty(*args, **kwds)Quelle

Basiert auf: google.appengine.ext.ndb.model.Property

Eine Property, deren Wert ein Bytestring ist. Kann komprimiert sein.

Klasse google.appengine.ext.ndb.model.JsonProperty(*args, **kwds)Quelle

Basis: google.appengine.ext.ndb.model.BlobProperty

Eine Property, deren Wert ein beliebiges JSON-codierbares Python-Objekt ist.

Klasse google.appengine.ext.ndb.model.StringProperty(*args, **kwds)Quelle

Basis: google.appengine.ext.ndb.model.TextProperty

Eine indexierte Property, deren Wert ein Textstring begrenzter Länge ist.

Klasse google.appengine.ext.ndb.model.FloatProperty(*args, **kwds)Quelle

Basiert auf: google.appengine.ext.ndb.model.Property

Eine Property, deren Wert den Python-Typ "float" hat.

Hinweis: "int", "long" und "bool" sind ebenfalls zulässig.

google.appengine.ext.ndb.model.BadProjectionError

Alias von InvalidPropertyError.

Klasse google.appengine.ext.ndb.model.LocalStructuredProperty(*args, **kwds)Quelle

Basis: google.appengine.ext.ndb.model._StructuredGetForDictMixin, google.appengine.ext.ndb.model.BlobProperty

Unterstruktur, die zu einem intransparenten Blob serialisiert ist.

Dies sieht auf Python-Seite wie "StructuredProperty" aus, wird aber wie eine "BlobProperty" in Cloud Datastore geschrieben. Es gibt keine Indexierung und Sie können keine untergeordneten Properties abfragen. Auf der anderen Seite ist die Darstellung auf Datenträger effizienter und kann durch Übergabe von "compressed=True" noch effizienter gemacht werden. So werden die Blob-Daten mit gzip komprimiert.

Klasse google.appengine.ext.ndb.model.TimeProperty(*args, **kwds)Quelle

Basis: google.appengine.ext.ndb.model.DateTimeProperty

Eine Property, deren Wert ein Zeitobjekt ist.

Klasse google.appengine.ext.ndb.model.UserProperty(*args, **kwds)Quelle

Basiert auf: google.appengine.ext.ndb.model.Property

Eine Property, deren Wert ein Nutzerobjekt ist.

Hinweis: Dies soll lediglich die Abwärtskompatibilität mit vorhandenen Cloud Datastore-Schemas gewährleisten. Die direkte Speicherung von Nutzerobjekten in Cloud Datastore wird nicht empfohlen. Speichern Sie stattdessen den Wert von "user.user_id()".

Ausnahme google.appengine.ext.ndb.model.InvalidPropertyErrorQuelle

Basis: google.appengine.api.datastore_errors.Error

Wird ausgelöst, wenn eine Property für einen bestimmten Zweck nicht geeignet ist.

Eine Property muss beispielsweise vorhanden und indexiert sein, damit sie in der Projektions- oder GROUP BY-Klausel einer Abfrage verwendet werden kann.

Ausnahme google.appengine.ext.ndb.model.KindErrorQuelle

Basis: google.appengine.api.datastore_errors.BadValueError

Wird ausgelöst, wenn eine Implementierung für eine Art nicht gefunden werden kann.

Wird auch ausgelöst, wenn die Art kein 8-Bit-String ist.

Klasse google.appengine.ext.ndb.model.ComputedProperty(func, name=None, indexed=None, repeated=None, verbose_name=None)Quelle

Basis: google.appengine.ext.ndb.model.GenericProperty

Eine Property, deren Wert durch eine vom Nutzer angegebene Funktion bestimmt wird.

Berechnete Properties können nicht direkt festgelegt werden, sondern werden bei Bedarf von einer Funktion generiert. Sie sind zur Bereitstellung von Feldern in Cloud Datastore nützlich, die zum Filtern oder Sortieren verwendet werden können, ohne den Wert manuell im Code festlegen zu müssen. So ist es beispielsweise möglich, nach der Länge einer BlobProperty zu sortieren oder mithilfe eines Gleichheitsfilters zu prüfen, ob ein anderes Feld nicht leer ist.

"ComputedProperty" kann als normale Property deklariert werden, wobei eine Funktion als erstes Argument übergeben wird. Sie kann auch als Decorator für die Funktion, die die Berechnung ausführt, verwendet werden.

Beispiel:

>>> class DatastoreFile(Model): ... name = StringProperty() ... name_lower = ComputedProperty(lambda self: self.name.lower()) ... ... data = BlobProperty() ... ... @ComputedProperty ... def size(self): ... return len(self.data) ... ... def _compute_hash(self): ... return hashlib.sha1(self.data).hexdigest() ... hash = ComputedProperty(_compute_hash, name='sha1')
Klasse google.appengine.ext.ndb.model.KeyProperty(*args, **kwds)Quelle

Basiert auf: google.appengine.ext.ndb.model.Property

Eine Property, deren Wert ein Schlüsselobjekt ist.

Optionales Schlüsselwortargument: kind=<kind>. Dieses legt fest, dass die Schlüssel, die dieser Property zugeordnet sind, immer die angegebene Art haben. Kann ein String oder eine abgeleitete Modellklasse sein.

Klasse google.appengine.ext.ndb.model.BooleanProperty(*args, **kwds)Quelle

Basiert auf: google.appengine.ext.ndb.model.Property

Eine Property, deren Wert den Python-Typ "bool" hat.

Klasse google.appengine.ext.ndb.model.PickleProperty(*args, **kwds)Quelle

Basis: google.appengine.ext.ndb.model.BlobProperty

Eine Property, deren Wert ein beliebiges Python-Objekt ist, für das sich ein Pickling ausführen lässt.

Klasse google.appengine.ext.ndb.model.IntegerProperty(*args, **kwds)Quelle

Basiert auf: google.appengine.ext.ndb.model.Property

Eine Property, deren Wert den Python-Typ "int" oder "long" (oder "bool") hat.

Klasse google.appengine.ext.ndb.model.Property(*args, **kwds)Quelle

Basis: google.appengine.ext.ndb.model.ModelAttribute

Eine Klasse, die ein typisiertes, persistentes Attribut einer Cloud Datastore-Entität beschreibt.

Nicht zu verwechseln mit der integrierten "property" von Python.

Dies ist nur eine Basisklasse. Es gibt spezielle abgeleitete Klassen, die Properties unterschiedlichen Typs beschreiben (und "GenericProperty", die eine dynamisch typisierte Property beschreibt).

Die Namen von allen speziellen Property-Attributen beginnen mit einem Unterstrich. Dies trifft sogar auf Attribute zu, die als "öffentlich" gelten. Grund hierfür ist der Property-Typ "StructuredProperty", der den Attribut-Namespace ohne Unterstrich verwendet, um auf verschachtelte Property-Namen zu verweisen. Dies ist für die Angabe von Abfragen für untergeordnete Properties unverzichtbar (siehe das Modul "docstring").

Die Property-Klasse und ihre vordefinierten abgeleiteten Klassen ermöglichen ein einfaches Erstellen von abgeleiteten Klassen mithilfe von zusammensetzbaren (oder stapelbaren) Validierungs- und Konvertierungs-APIs. Einige Begriffe müssen in diesem Zusammenhang erläutert werden:

  • Ein "Nutzerwert" ist ein Wert, der durch den Anwendungscode unter Verwendung von Standardattributen für die Entität festgelegt und abgerufen wird.

  • Ein "Basiswert" ist ein Wert, der in Cloud Datastore serialisiert und deserialisiert wird.

Die Werte, die in "ent._values[name]" gespeichert sind und von "_store_value()" und "_retrieve_value()" abgerufen werden, können entweder Nutzerwerte oder Basiswerte sein. Verwenden Sie "_get_user_value()", um Nutzerwerte abzurufen. Zum Abrufen von Basiswerten verwenden Sie _get_base_value(). Insbesondere ruft "_get_value()" die "_get_user_value()" und "_serialize()" effektiv den "_get_base_value()" auf.

Rufen Sie zum Speichern eines Nutzerwerts einfach _store_value() auf. Fügen Sie den Wert in einen _BaseValue() ein und rufen Sie dann _store_value() auf, um einen Basiswert zu speichern.

Eine abgeleitete Property-Klasse zur Implementierung einer bestimmten Transformation zwischen Nutzerwerten und serialisierbaren Werten sollte zwei Methoden implementieren: _to_base_type() und _from_base_type(). Diese sollten NICHT ihre super()-Methode aufrufen; Superaufrufe werden von _call_to_base_type() und _call_from_base_type() übernommen. Dies ist das Konzept von zusammensetzbaren (oder stapelbaren) APIs.

Die API unterstützt Stacking-Klassen mit immer komplexeren Konvertierungen zwischen Nutzer- und Basiswerten: Die Konvertierung von Nutzer- zu Basiswert geht von sehr komplex zu weniger komplex, während die umgekehrte Konvertierung von weniger komplex zu sehr komplex geht. Sehen Sie sich als Beispiel die Beziehung zwischen "BlobProperty", "TextProperty" und "StringProperty" an.

Neben "_to_base_type()" und "_from_base_type()" ist die Methode "_validate()" ebenfalls eine zusammensetzbare API.

Die Validierungs-API unterscheidet zwischen "laxen" und "strikten" Nutzerwerten. Die Menge der laxen Werte ist eine Obermenge der Menge der strikten Werte. Die Methode "_validate()" nimmt einen laxen Wert an und wandelt ihn bei Bedarf in einen strikten Wert um. Dies bedeutet, dass beim Festlegen des Property-Werts laxe Werte angenommen werden, während beim Abrufen des Property-Werts nur strikte Werte zurückgegeben werden. Wenn keine Konvertierung erforderlich ist, kann "_validate()" den Wert "None" zurückgeben. Liegt das Argument außerhalb der Menge von akzeptierten laxen Werten, sollte "_validate()" eine Ausnahme auslösen, vorzugsweise "TypeError" oder "datastore_errors.BadValueError.

Beispiel/Standardcode:

def _validate(self, value):

‘Lax user value to strict user value.’ if not isinstance(value, <top type>):

raise TypeError(…) # Oder datastore_errors.BadValueError(…).

def _to_base_type(self, value):

‘(Strict) user value to base value.’ if isinstance(value, <user type>):

return <base type>(value)

def _from_base_type(self, value):

‘base value to (strict) user value.’ if not isinstance(value, <base type>):

return <user type>(value)

Für Folgendes sind "_validate()", "_to_base_type()" und "_from_base_type()" nicht zuständig:

  • "None": Sie werden nicht mit "None" aufgerufen. Wenn sie "None" zurückgeben, bedeutet dies, dass der Wert nicht konvertiert werden muss.

  • Wiederholte Werte: Die Infrastruktur ("_get_user_value()" und "_get_base_value()") übernimmt den Aufruf von "_from_base_type()" oder "_to_base_type()" für jedes Listenelement in einem wiederholten Wert.

  • Wrapping von Werten in "_BaseValue()": Das Wrapping und Unwrapping wird von der Infrastruktur übernommen, die die zusammensetzbaren APIs aufruft.

  • Vergleiche: Die Vergleichsvorgänge rufen "_to_base_type()" für ihre Operanden auf.

  • Unterscheidung zwischen Nutzer- und Basiswerten: Die Infrastruktur gewährleistet, dass "_from_base_type()" mit einem (nicht eingebetteten) Basiswert und "_to_base_type()" mit einem Nutzerwert aufgerufen wird.

  • Rückgabe des ursprünglichen Werts: Bei Rückgabe des Werts "None" wird der ursprüngliche Wert beibehalten. Wird ein anderer Wert als "None" zurückgegeben, wird der andere Wert an die Stelle gesetzt.

IN(value)source

Vergleichsoperator für den Vergleichsoperator "in".

Der Python-Operator "in" kann nicht auf die gewünschte Art und Weise überladen werden. Daher wird eine Methode definiert. Beispiel:

Employee.query(Employee.rank.IN([4, 5, 6]))

Die Methode heißt ._IN(), wird aber normalerweise als .IN() aufgerufen. ._IN() wird für den Fall bereitgestellt, dass eine StructuredProperty mit einem Modell mit einem Attribut namens "IN" vorhanden ist.

Klasse google.appengine.ext.ndb.model.DateProperty(*args, **kwds)Quelle

Basis: google.appengine.ext.ndb.model.DateTimeProperty

Eine Property, deren Wert ein Datumsobjekt ist.

Klasse google.appengine.ext.ndb.model.TextProperty(*args, **kwds)Quelle

Basis: google.appengine.ext.ndb.model.BlobProperty

Eine nicht indexierte Property, deren Wert ein Textstring mit unbegrenzter Länge ist.

Klasse google.appengine.ext.ndb.model.DateTimeProperty(*args, **kwds)Quelle

Basiert auf: google.appengine.ext.ndb.model.Property

Eine Property, deren Wert ein Datum-/Uhrzeit-Objekt ist.

Hinweis: Anders als bei Django kann "auto_now_add" überschrieben werden. Legen Sie dazu den Wert fest, bevor Sie die Entität schreiben. Außerdem unterstützt "auto_now" im Gegensatz zu Classic DB keinen Standardwert. Ein weiterer Unterschied zu Classic DB besteht darin, dass die Property-Werte beim Schreiben der Entität entsprechend aktualisiert werden. Dabei ist zu beachten, dass damit auch der Wert im aktuellen Cache aktualisiert wird und "auto_now_add" unter Umständen merkwürdig mit Transaktionswiederholungen interagiert. Bei der Wiederholung einer Property mit festgelegtem "auto_now_add" wird der Wert wiederverwendet, der beim ersten Versuch festgelegt war.

Klasse google.appengine.ext.ndb.model.GenericProperty(*args, **kwds)Quelle

Basiert auf: google.appengine.ext.ndb.model.Property

Eine Property, deren Wert (fast) jeder Basistyp sein kann.

Diese Property wird hauptsächlich für Expando und verwaiste Werte verwendet, die zwar in Cloud Datastore vorhanden sind, aber in der abgeleiteten Modellklasse nicht dargestellt werden. Sie kann aber auch explizit für Properties mit dynamisch typisierten Werten eingesetzt werden.

"compressed=True" wird unterstützt. Dies ist nur für "str"-Werte (nicht für Unicode) gültig und impliziert "indexed=False".

Ausnahme google.appengine.ext.ndb.model.UnprojectedPropertyErrorQuelle

Basis: google.appengine.api.datastore_errors.Error

Wird ausgelöst, wenn ein Property-Wert abgerufen wird, der nicht in der Projektion enthalten ist.

Klasse google.appengine.ext.ndb.model.StructuredProperty(*args, **kwds)Quelle

Basis: google.appengine.ext.ndb.model._StructuredGetForDictMixin

Eine Property, deren Wert selbst eine Entität ist.

Die Werte der untergeordneten Entität sind indexiert und können abgefragt werden.

Weitere Informationen erhalten Sie im Modul "docstring".

IN(value)source
Klasse google.appengine.ext.ndb.model.GeoPtProperty(*args, **kwds)Quelle

Basiert auf: google.appengine.ext.ndb.model.Property

Eine Property, deren Wert ein GeoPt ist.

Ausnahme google.appengine.ext.ndb.model.ComputedPropertyErrorQuelle

Basis: google.appengine.ext.ndb.model.ReadonlyPropertyError

Wird beim Versuch ausgelöst, einen Wert für eine berechnete Property festzulegen oder eine solche zu löschen

Klasse google.appengine.ext.ndb.model.BlobKeyProperty(*args, **kwds)Quelle

Basiert auf: google.appengine.ext.ndb.model.Property

Eine Property, deren Wert ein BlobKey-Objekt ist.

Ausnahme google.appengine.ext.ndb.model.ReadonlyPropertyErrorQuelle

Basis: google.appengine.api.datastore_errors.Error

Wird beim Versuch ausgelöst, einen schreibgeschützten Property-Wert festzulegen