我的数据存储中有一些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不工作!我希望这个答案可以为有同样问题的人节省一些时间。