Appengine: db.Model.get_by_id(id)不起作用



我的数据存储中有一些ice实体。当我在admin-webInterface

上运行以下命令时
from google.appengine.ext import db
class Ice(db.Model):
    name = db.StringProperty()
    description = db.StringProperty(multiline=True)
    date = db.DateTimeProperty(auto_now_add=True)
for ice in Ice.all():
    print ice.key().id()
    print Ice.get_by_id(ice.key().id())

我总是得到:

4
None
5
None
6
None
7
None
8
None
9
None
10
None
11
None
12
None
13
None
14
None
15
None
16
None
17
None
18
None
19
None
20
None

为什么?

如果您的Ice实体是子实体,您将看到确切的这种行为。id字段不是全局唯一的——只对给定的类型和父类唯一。

您正在使用Ice.key()。你想换成Model.get_by_key_name()吗?

我最近也遇到了get_by_id方法的问题。我使用SDK 1.7.6。问题是,新的dev_appserver创建的数据存储实体id值大于Javascript可以处理的值。我可以通过使用顺序id在您的开发环境中固定。

使用此链接查看进一步解释Issue 1.7.6

当我寻找这个问题的解决方案时,我被所有关于失踪父母的反馈弄糊涂了。我没有丢失的父母关系,仍然get_by_id不工作!我希望这个答案可以为有同样问题的人节省一些时间。

最新更新