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.

War es hilfreich?

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.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top