Google App Engine:get_by_id()的替代方法

时间:2011-05-10 06:41:04

标签: python google-app-engine

通过给定实体ID,我将按models = Model.get_by_id(id)进行查询。但是,我发现有一段时间它不会收集结果。

是否有任何替代或推荐的方法可以通过Google App Engine中的实体ID进行查询,python?

4 个答案:

答案 0 :(得分:5)

如果您使用父级保存类实例,则get_by_id将不会返回该对象,而是由于该键未完成的原因而返回None,因此也需要父键。我遇到了同样的问题,并且很难弄明白。

ico = Icons.get_by_id("3", parent = parentkey)

这将返回一个对象。 ; - )

答案 1 :(得分:3)

如果Model.get_by_id(id)返回None,则表示您提供的ID无效,而不是方法本身不可靠。

在系统中断的情况下,此方法可能会失败并不是不可思议,但如果确实如此,您的调用将抛出数据存储异常,而不是返回空结果。

答案 2 :(得分:1)

问题在2011-05-10之后自动消失,这是v1.5发布日期。不确定这个问题是否相关。

我没有更改任何代码,因为get_by_id()在这几天一直很好。此外,我添加了一个cron作业,每分钟运行一次get_by_id()并尝试使实例生效。

根据我的观察,get_by_id()失败,因为它无法查询数据存储区。

顺便说一下,数据存储区的设置是主/从复制。

答案 3 :(得分:0)

如果传递的对象是对象的有效id并且数据存储中存在对象,则

get_by_id()始终获取对象。

id可以通过templat

中的object.key.id获取

否则你总是拥有object.get(key).