2009-03-16 9 views
6

Non riesco a allenare come ottenere oggetti dal datastore di Google App Engine utilizzando get_by_id. Ecco il modellometodo get_by_id sulle classi Modello nel datastore di Google App Engine

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) 

Posso crearli, metterli e recuperarli con 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() 

Un salvato indirizzo ha valori per

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

posso trovare loro utilizzando il tasto

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

Ma non li riesce a trovare da id

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

Il l'indirizzo è Nessuno, quando provo

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

Come posso trovare per ID?

EDIT: Si scopre che sono un idiota e cercavo di trovare un modello di indirizzo in una funzione chiamata Indirizzo. Grazie per le tue risposte, ho contrassegnato Brandon come la risposta corretta, come ha ottenuto in primo luogo e ha dimostrato che dovrebbe funzionare tutto.

risposta

22

ho appena provato su shell.appspot.com e sembra funzionare bene: chiave

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

grazie per estrarlo .. Ho effettueremo ulteriori accertamenti – tarn

+2

farebbe +2 se potevo per rendere anche me a conoscenza del guscio App Engine – tarn

+0

questo funziona totalmente – Neelesh

6

Una di applicazione è un elenco di (Tipo, id_or_name) tuple - per le entità di radice, sempre lungo un solo elemento. Pertanto, un ID da solo non identifica un'entità - anche il tipo di entità è richiesto. Quando chiami db.Model.get_by_id (x), stai richiedendo l'entità con chiave (Modello, x). Quello che vuoi è chiamare Address.get_by_id (x), che recupera l'entità con la chiave (Indirizzo, x).

0

È necessario utilizzare il tipo lungo in get_by_id ("qui"). Il tipo Int deve avere un messaggio di errore.

+0

Anche se questa potrebbe non essere la risposta a questa domanda, ha risolto il mio problema. – Nico

Problemi correlati