Model

Die Klasse Model ist die Superklasse für die Definition von einem Daten Model. Eine Applikation definiert ein Daten Model indem sie eine eine Klasse die von Model abgeleitet wird. Die benötigten Eigenschaften der Klasse werden als Instanz der Klasse Property definiert.

Das Daten Model Message besitzt einen title als String, einen body als Text und created als DateTime Eigenschaft, created hat als Parameter noch auto_now_add womit das aktuelle Datum mit Zeit beim speichern mit gespeichert wird, wodurch der Wert nicht explizit gesetzt werden muss.

Eine eindeutige ID muss als Eigenschaft nicht definiert werden, die Model Klasse definiert und setzt diese Eigenschaft automatisch, wenn die Funktion put() zum speichern ausgeführt wird.

Einen neuen Datensatz erstellt die Applikation einfach indem sie eine Instanz der definierten Klasse erstellt und den Eigenschaften werden entsprechende Werte zugewiesen.

Einen so erstellten Datensatz speichert man mit der Methode put() der Model Instanz selbst oder man nutzt die put() Methode des db Moduls und übergibt als Parameter das Daten-Objekt.

Beim ersten speichern im Datastore bekommt der Datensatz einen eindeutigen Schlüssel.
Ein späteres Speichern überschreibt die bestehenden Daten wenn sie neu zugewiesen wurden, denn so wird ein Datensatz später auch editiert.
Diesen Schlüssel liefert die Methode key() als Key Objekt zurück.

Die Methode get() liefert mit diesem Key Objekt als Parameter wieder eine Model Instanz zurück.

Um die gespeicherten Daten aus dem Datastore zu bekommen, werden mehrere Möglichkeiten geboten. Die Methode all() einer Model Instanz liefert ein Query Objekt zurück, das Objekt stellt eine Abfrage über alle Daten des Models dar.
Um die Ergebnismenge zu erhalten muss die Abfrage anschliessend noch ausgeführt werden, mit der Methode get() erhält man den ersten Datensatz eine Liste erhält man mit der Methode fetch(num), wobei num die Anzahl angibt die man an Datensätzen aus dem Datastore erhalten möchte. Auf die jeweiligen Eigenschaften des Datensatzes greif man dann über Punktnotation zu um als direkte Ausgabe oder innerhalb einer Iteration die Werte auszugeben.

Die Methode gql() bietet die Möglichkeit, ein GQL-Statement in kurzer Schreibweise abzusenden. Es muss nur der WHERE-Teil der Abfrage geschrieben werden da die Methode den „SELECT * FROM model“ Teil selbstständig setzt.

Die beiden Klassen Query, GqlQuery und die Methode gql() führen die Abfragen nicht automatisch aus sondern erst wenn die Methode get() oder die Methode fetch(num) ausgeführt wird.

Es ist natürlich möglich die Methoden hintereinander, anstatt untereinander auszuführen.

Um einen Datensatz zu editieren, weisst man der Eigenschaft einer Model Instanz einen neuen Wert zu. Um den Datensatz dann in den Datastore zu speichern wird wie beim Eintragen die Methode put() verwendet. Der Datensatz wird dann im Datastore einfach überschrieben mit den neuen Werten, nicht zugewiesene Werte bleiben wie vorhanden im Datastore bestehen.

Einen Datensatz löst man indem man die Model Instanz der Methode delete() des db Moduls als Parameter übergibt. Es ist auch möglich eine Liste von mehreren Model Instanz die von der Methode fetch(num) zurück gegeben wird, als Parameter zu übergeben.

Möchte man einen Datensatz anhand des eindeutigen Schlüssels abfragen, nutzt man die Key-Klasse.

Model – Klassen Methoden
Mit der Methode kind() wird der Typ des Model zurück gegeben, der Name der Kind Klasse.
Die Methode properties() gibt eine assosiative Liste aller Eigenschaften zurück.
Wenn man mit der ID eine Model Instanz erhalten will nutzt man die Methode get_by_id(ids, parent=None), ids kann als String oder als Liste übergeben werden, mit dem Parameter parent kann definiert werden ob das Model das Parent Model enthält.
Dagegen kann mit der Methoode get_by_key_name(key_names, parent=None) eine Model Instanz aufgrund des Keys abgefragt werden. Die Parameter werden gleich wie bei der Methode get_by_id() behandelt. Die Methode get_or_insert() gibt eine Model Instanz zurück, wenn das Model noch nicht angelegt ist wird dieses getan und die Instanz zurück gegeben.

Model – Instanzen Methoden
Es werden noch einige Methoden von Model Instanzen geboten. Mit is_saved() kann überprüft werden ob eine Model Instanz schon im Datastore gespeichert ist, die Methode gibt einen Boolean zurück. Mit delete() kann man eine Model Instanz löschen. Die Methode parent() gibt die Elternklasse oder None zurück wenn die Instanz keine besitzt. Den Key der Elternklasse erhält man mit der Methode parent_key() oder None wenn keiner existiert.
Eine XML Darstellung der Model Instanz erhält man mit der Methode to_xml().

Schreibe einen Kommentar