小编典典

在App Engine中无需获取对象即可访问相关对象键

python

通常,对于一个给定的对象,最好执行单个查询,而不要执行多个查询。假设我有一堆“儿子”物件,每个物件都有一个“父亲”。我得到了所有的“儿子”对象:

sons = Son.all()

然后,我想让那组儿子得到所有的父亲。我做:

father_keys = {}
for son in sons:
    father_keys.setdefault(son.father.key(), None)

然后我可以做:

fathers = Father.get(father_keys.keys())

现在,这假设son.father.key()实际上并未获取该对象。我在这方面错了吗?我有一堆代码,假设object.related_object.key()实际上并未从数据存储区中获取related_object。

我这样做对吗?


阅读 126

收藏
2021-01-20

共1个答案

小编典典

您可以通过下载App Engine
SDK来源中的appengine.ext.db来源来找到答案-
答案是,不,没有您需要的特殊框:__get__方法(来源中的第2887行) (对于1.3.0 SDK)ReferenceProperty
描述符的描述符被调用, 然后才 知道是否.key()对结果进行调用,因此就没有机会进行所需的优化。

但是 ,请参见第2929行:方法get_value_for_datastore 确实 完成了您想要的!

具体来说,son.father.key()使用而不是使用Son.father.get_value_for_datastore(son),结果您会
快乐;-)。

2021-01-20