我无法使用get_by_id来研究如何从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)
我可以创建它们,放置它们,并使用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()
保存的地址具有值
>> address.key() aglndWVzdGJvb2tyDQsSB0FkZHJlc3MYDQw >> address.key().id() 14
我可以使用密钥找到它们
from google.appengine.ext import db address = db.get('aglndWVzdGJvb2tyDQsSB0FkZHJlc3MYDQw')
但是无法通过id找到它们
>> from google.appengine.ext import db >> address = db.Model.get_by_id(14)
当我尝试时,地址是无
>> Address.get_by_id(14) AttributeError: type object 'Address' has no attribute 'get_by_id'
我如何通过id找到?
编辑:事实证明我是一个白痴,并试图在一个名为地址的函数中找到一个地址模型.感谢您的回答,我将布兰登标记为正确的答案,因为他首先进入并证明了它应该全部工作.
我刚刚尝试过,shell.appspot.com
似乎工作正常:
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>
应用程序的密钥是(kind,id_or_name)元组的列表 - 对于根实体,始终只有一个元素长.因此,仅ID不识别实体 - 实体的类型也是必需的.当你调用db.Model.get_by_id(x)时,你要求的是带有键的实体(Model,x).你想要的是调用Address.get_by_id(x),它使用键(地址,x)获取实体.