Schlüsselklasse

Hinweis: Entwicklern von neuen Anwendungen wird dringend empfohlen, die NDB-Clientbibliothek zu verwenden. Diese bietet im Vergleich zur vorliegenden Clientbibliothek verschiedene Vorteile, z. B. das automatische Caching von Entitäten über die Memcache API. Wenn Sie derzeit die ältere DB-Clientbibliothek verwenden, finden Sie weitere Informationen im Leitfaden zur Migration von DB- zu NDB-Clientbibliotheken.

Eine Instanz der Schlüsselklasse stellt einen eindeutigen Schlüssel für eine Datenspeicherentität dar.

Key wird vom Modul google.appengine.ext.db bereitgestellt.

Einführung

Jede Modellinstanz enthält einen Identifizierungsschlüssel, der den Entitätstyp der Instanz und eine eindeutige Kennzeichnung umfasst. Die Kennzeichnung kann entweder ein Schlüsselnamenstring sein, der beim Erstellen der Instanz explizit von der Anwendung zugewiesen wird, oder eine ganzzahlige numerische ID, die beim Schreiben der Instanz in Datastore automatisch von App Engine zugewiesen wird (put-Vorgang). Die Methode key() der Modellinstanz gibt das Key-Objekt für die Instanz zurück. Wenn der Instanz noch kein Schlüssel zugewiesen wurde, löst key() den Fehler NotSavedError aus.

Eine Anwendung kann mithilfe der get() eine Modellinstanz für einen bestimmten Schlüssel abrufen.

Schlüsselinstanzen können Werte für Attribute von Datastore-Entitäten sein, einschließlich dynamische Expando-Attribute und Mitglieder vom Typ ListProperty. Das Modell ReferenceProperty stellt Funktionen wie die automatische Dereferenzierung für Werte von Schlüsselattributen bereit.

Konstruktor

Klasse Key(encoded=None)

Ein eindeutiger Schlüssel für ein Datenspeicherobjekt.

Durch Übergabe des Schlüsselobjekts an str() kann ein Schlüssel in einen String konvertiert werden. Der String ist "URL-sicher", d. h., es werden nur Zeichen verwendet, die für URLs zulässig sind. Sie können die Stringdarstellung des Schlüssels wieder in ein Schlüsselobjekt konvertieren. Dazu müssen Sie den Schlüssel an den Schlüsselkonstruktor (das codierte Argument) übergeben.

Hinweis: Die Stringdarstellung eines Schlüssels sieht verschlüsselt aus, ist es jedoch nicht. Sie kann wieder in die Schlüsselrohdaten, also Typ und Kennzeichnung, konvertiert werden. Wenn Ihre Nutzer keinen Zugriff auf diese Daten und damit auch nicht die Möglichkeit haben sollen, die Schlüssel anderer Entitäten leicht zu erraten, verschlüsseln Sie diese Strings oder verwenden eine andere Methode.

encoded
Die str-Form einer Schlüsselinstanz, die wieder in einen Schlüssel konvertiert werden soll.

Klassenmethoden

Die Schlüsselklasse stellt die folgenden Klassenmethoden bereit:

Key.from_path(*path, parent=None, namespace=None)

Erstellt ein neues Schlüsselobjekt aus einem (optionalen) Ancestor-Pfad (in einem vorhandenen Schlüsselobjekt) und einer oder mehreren neuen Pfadkomponenten. Jede Pfadkomponente besteht aus dem Namen eines Typs (kind) und einer Kennzeichnung (id_or_name), die entweder eine Zahl oder ein Zeichenstring ist.

Ein Pfad stellt die Hierarchie von Beziehungen über- und untergeordneter Beziehungen für eine Entität dar. Jede Entität im Pfad wird durch den Typ der Entität und ihre numerische ID oder ihren Schlüsselnamen dargestellt. Der vollständige Pfad stellt die Entität dar, die als letzte Entität im Pfad angezeigt wird. Davor sind deren übergeordnete Entitäten zu finden.

Der folgende Aufruf erstellt beispielsweise einen Schlüssel für eine Entität vom Typ Address mit der numerischen ID 9876 unter dem übergeordneten Schlüssel User/Boris:

k = Key.from_path('User', 'Boris', 'Address', 9876)

Derselbe Schlüssel kann auch so erstellt werden:

p1 = Key.from_path('User', 'Boris')
k = Key.from_path('Address', 9876, parent=p1)

Weitere Informationen zu Pfaden finden Sie auf der Seite Entitäten, Properties und Schlüssel.

Argumente

path
Eine oder mehrere Ancestor-Pfadkomponenten, wobei jede Komponente aus einem Typ und einer Kennzeichnung besteht:
  • Typ – Der Entitätstyp, dargestellt als String oder Unicode-String.
  • Kennzeichnung – Die id, angegeben als String oder "long". Die Zahl 0 darf nicht verwendet werden.
namespace=None
Der Namespace, der nur für diesen Schlüssel festgelegt werden soll. Wenn Sie hier einen Namespace angeben, wird der aktuelle Namespace in namespace_manager überschrieben. Bei Angabe von None verwendet die API den aktuellen Namespace aus namespace_manager.get_namespace.
parent=None
Optionaler übergeordneter Schlüssel. Standardmäßig wird None verwendet, sofern keine Angabe gemacht wird.

Instanzmethoden

Schlüsselinstanzen weisen die folgenden Methoden auf:

app()

Gibt den Namen der Anwendung zurück, in der die Datenentität gespeichert wurde.

has_id_or_name()

Gibt True zurück, wenn die Entität entweder einen Namen oder eine numerische ID aufweist.

id()

Gibt die numerische ID der Datenentität als Ganzzahl oder None zurück, wenn die Entität keine numerische ID hat.

id_or_name()

Gibt je nach Vorhandensein entweder den Namen oder die numerische ID der Datenentität oder aber None zurück, wenn die Entität weder einen Namen noch eine numerische ID hat.

kind()

Gibt den Typ der Datenentität als String zurück.

name()

Gibt den Namen der Datenentität oder None zurück, wenn die Entität keinen Namen hat.

namespace()

Gibt den Namespace der Datenentität zurück. Wenn die Entität keinen aktuellen Namespace hat, gibt diese Methode den aktuellen Namespace aus namespace_manager zurück.

parent()

Gibt den Schlüssel der übergeordneten Entität der Datenentität oder None zurück, wenn die Entität kein übergeordnetes Element hat.