当前位置:  开发笔记 > 编程语言 > 正文

Google App Engine数据存储区中的模型类的get_by_id方法

如何解决《GoogleAppEngine数据存储区中的模型类的get_by_id方法》经验,为你挑选了2个好方法。

我无法使用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找到?

编辑:事实证明我是一个白痴,并试图在一个名为地址的函数中找到一个地址模型.感谢您的回答,我将布兰登标记为正确的答案,因为他首先进入并证明了它应该全部工作.



1> gravitation..:

我刚刚尝试过,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>


如果我还能让我意识到app引擎shell的话会+2

2> Nick Johnson..:

应用程序的密钥是(kind,id_or_name)元组的列表 - 对于根实体,始终只有一个元素长.因此,仅ID不识别实体 - 实体的类型也是必需的.当你调用db.Model.get_by_id(x)时,你要求的是带有键的实体(Model,x).你想要的是调用Address.get_by_id(x),它使用键(地址,x)获取实体.

推荐阅读
乐韵答题
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有