get_by_id Verfahren auf Modellklassen in Google App Engine-Datenspeicher
-
19-08-2019 - |
Frage
Ich bin nicht in der Lage zu trainieren, wie Sie Objekte aus dem Google App Engine-Datenspeicher mit get_by_id zu bekommen. Hier ist das Modell
from google.appengine.ext import db
class Address(db.Model):
description = db.StringProperty(multiline=True)
latitude = db.FloatProperty()
longitdue = db.FloatProperty()
date = db.DateTimeProperty(auto_now_add=True)
Ich kann sie schaffen, setzen sie, und rufen sie mit gql.
address = Address()
address.description = self.request.get('name')
address.latitude = float(self.request.get('latitude'))
address.longitude = float(self.request.get('longitude'))
address.put()
Eine gespeicherte Adresse hat Werte für
>> address.key()
aglndWVzdGJvb2tyDQsSB0FkZHJlc3MYDQw
>> address.key().id()
14
Ich kann sie mit dem Schlüssel finden
from google.appengine.ext import db
address = db.get('aglndWVzdGJvb2tyDQsSB0FkZHJlc3MYDQw')
Aber kann sie nicht von id finden
>> from google.appengine.ext import db
>> address = db.Model.get_by_id(14)
Die Adresse ist None, wenn ich versuche,
>> Address.get_by_id(14)
AttributeError: type object 'Address' has no attribute 'get_by_id'
Wie kann ich von id finden?
EDIT: Es stellt sich heraus, dass ich bin ein Idiot und habe versucht, eine Adresse Modell in einer Funktion namens Adresse finden. Vielen Dank für Ihre Antworten, habe ich Brandon als die richtige Antwort markiert, als er in dem ersten bekam und zeigte alles funktionieren soll.
Lösung
Ich habe gerade versucht es auf shell.appspot.com
und es scheint gut zu funktionieren:
Google Apphosting/1.0
Python 2.5.2 (r252:60911, Feb 25 2009, 11:04:42)
[GCC 4.1.0]
>>> class Address(db.Model):
description = db.StringProperty(multiline=True)
latitude = db.FloatProperty()
longitdue = db.FloatProperty()
date = db.DateTimeProperty(auto_now_add=True)
>>> addy = Address()
>>> addyput = addy.put()
>>> addyput.id()
136522L
>>> Address.get_by_id(136522)
<__main__.Address object at 0xa6b33ae3bf436250>
Andere Tipps
Ein Schlüssel der App ist eine Liste der (Art, id_or_name) Tupel - für Stammentitäten, immer nur ein Element lang. Somit muss eine ID nicht allein eine Entität identifizieren - die Art des Unternehmens ist ebenfalls erforderlich. Wenn Sie db.Model.get_by_id (x) nennen, die Sie für die Entität mit Schlüsseln zu fragen (Modell, x). Was Sie wollen, ist Address.get_by_id (x) zu nennen, die die Einheit mit Schlüsseln (Adresse, x) abruft.
Sie sollten langen Typen in get_by_id ( "hier") verwenden. Int-Typ muss eine Fehlermeldung hat.