Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

get_by_id method on Model classes in Google App Engine Datastore

I'm unable to workout how you can get objects from the Google App Engine Datastore using get_by_id. Here is the model

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)

I can create them, put them, and retrieve them with 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()

A saved address has values for

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

I can find them using the key

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

But can't find them by id

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

The address is None, when I try

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

How can I find by id?

EDIT: It turns out I'm an idiot and was trying find an Address Model in a function called Address. Thanks for your answers, I've marked Brandon as the correct answer as he got in first and demonstrated it should all work.

like image 303
tarn Avatar asked Mar 16 '09 04:03

tarn


1 Answers

I just tried it on shell.appspot.com and it seems to work fine:

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>
like image 162
gravitation Avatar answered Oct 26 '22 19:10

gravitation