2009-03-16 4 views
6

Ich kann nicht trainieren, wie Sie mit get_by_id Objekte aus dem Google App Engine-Datenspeicher abrufen können. Hier ist das ModellMethode "get_by_id" für Modellklassen im Google App Engine-Datenspeicher

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 erstellen, sie setzen und sie mit gql abrufen.

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 Adresswerte hat für

>> address.key() 
aglndWVzdGJvb2tyDQsSB0FkZHJlc3MYDQw 
>> address.key().id() 
14 

ich sie mit dem Schlüssel

from google.appengine.ext import db 
address = db.get('aglndWVzdGJvb2tyDQsSB0FkZHJlc3MYDQw') 

finden aber kann sie nicht von id finden

>> from google.appengine.ext import db 
>> address = db.Model.get_by_id(14) 

Die Adresse ist keine, wenn ich versuche

>> Address.get_by_id(14) 
AttributeError: type object 'Address' has no attribute 'get_by_id' 

Wie kann ich durch ID finden?

EDIT: Es stellt sich heraus, dass ich ein Idiot bin und versuchte, ein Adressmodell in einer Funktion namens Adresse zu finden. Danke für deine Antworten, ich habe Brandon als die richtige Antwort markiert, als er zuerst hinein kam und demonstrierte, dass alles funktionieren sollte.

Antwort

22

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> 
+0

Dank dafür aus .. Überprüfung ich werde – tarn

+2

würde zwei, wenn ich könnte auch für den mich weiter untersuchen, Kenntnis von dem App Engine Shell – tarn

+0

diese total funktioniert – Neelesh

6

aN Schlüssel App eine Liste (Art, id_or_name) Tupel ist - für Stammentitäten, immer ein Element nur lang. Daher identifiziert eine ID allein keine Entität - die Art der Entität wird ebenfalls benötigt. Wenn Sie db.Model.get_by_id (x) aufrufen, fragen Sie nach der Entität mit Schlüssel (Model, x). Sie möchten Address.get_by_id (x) aufrufen, wodurch die Entität mit dem Schlüssel (Address, x) abgerufen wird.

0

Sie sollten long type get_by_id ("hier") verwenden. Int-Typ muss eine Fehlermeldung haben.

+0

Obwohl dies möglicherweise nicht die Antwort auf diese Frage ist, löste es mein Problem. – Nico

Verwandte Themen