2009-03-16 15 views
6

No puedo entrenar cómo se pueden obtener objetos del almacén de datos de Google App Engine usando get_by_id. Aquí está el modelométodo get_by_id en clases de modelo en el almacén de datos de 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) 

Puedo crearlos, ponerlos y recuperarlos 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 salvado de direcciones tiene valores para

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

puedo encontrarlos usando la tecla

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

Pero no puede encontrarlos por ID

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

El la dirección es Ninguna, cuando intento

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

¿Cómo puedo encontrarme por ID?

EDITAR: Resulta que soy un idiota y estaba tratando de encontrar un modelo de dirección en una función llamada Dirección. Gracias por sus respuestas, marqué a Brandon como la respuesta correcta ya que él ingresó primero y demostró que todo debería funcionar.

Respuesta

22

yo sólo probé en shell.appspot.com y parece funcionar bien: clave

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

gracias por consultarlo ... investigaré más a fondo – tarn

+2

haría +2 si pudiera por informarme sobre la carcasa del motor de la aplicación – tarn

+0

esto funciona totalmente – Neelesh

6

Una de aplicación es una lista de (tipo), id_or_name tuplas - para entidades raíz, siempre sólo un elemento de longitud. Por lo tanto, una ID sola no identifica una entidad; también se requiere el tipo de entidad. Cuando llamas a db.Model.get_by_id (x), estás pidiendo la entidad con la clave (Model, x). Lo que desea es llamar a Address.get_by_id (x), que recupera la entidad con la clave (Address, x).

0

Debe usar el tipo largo en get_by_id ("aquí"). El tipo Int debe tener un mensaje de error.

+0

Aunque esta puede no ser la respuesta para esta pregunta, resolvió mi problema. – Nico

Cuestiones relacionadas