访问相关对象键而不在App Engine中获取对象

2023-11-25

一般来说,对给定对象执行单个查询比执行多个查询更好。假设我有一堆“儿子”对象,每个对象都有一个“父亲”。我得到了所有“儿子”对象:

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.lated_object.key() 实际上并未从数据存储区获取 related_object 。

我这样做对吗?


通过研究来源就能找到答案appengine.ext.db在您下载的 App Engine SDK 源代码中 - 答案是,不,没有您需要的特殊情况:__get__方法(1.3.0 SDK 源代码中的第 2887 行)ReferenceProperty描述符被调用before知道如果.key()或者稍后将在结果上调用其他任何内容,因此它没有机会进行您想要的优化。

However,参见第 2929 行:方法get_value_for_datastore does做你想做的事!

具体来说,而不是son.father.key(), use Son.father.get_value_for_datastore(son)你应该是much结果更快乐;-)。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

访问相关对象键而不在App Engine中获取对象 的相关文章