sot*_*ips 7 python google-app-engine google-cloud-datastore
通常,对于给定对象,最好对单个查询与许多查询进行比较.假设我有一堆"儿子"物品,每个物品都有一个"父亲".我得到了所有'儿子'对象:
sons = Son.all()
Run Code Online (Sandbox Code Playgroud)
然后,我想让那群儿子的所有父亲.我做:
father_keys = {}
for son in sons:
father_keys.setdefault(son.father.key(), None)
Run Code Online (Sandbox Code Playgroud)
然后我可以这样做:
fathers = Father.get(father_keys.keys())
Run Code Online (Sandbox Code Playgroud)
现在,这假设son.father.key()实际上并没有获取对象.我错了吗?我有一堆代码假定object.related_object.key()实际上没有从数据存储区中获取related_object.
我这样做了吗?
Ale*_*lli 10
您可以通过在下载App Engine SDK源代码中研究appengine.ext.db的来源找到答案- 答案是,不,没有您需要的特殊外壳:__get__方法(来源中的第2887行)对于ReferenceProperty描述符的1.3.0 SDK),在知道.key()稍后是否会在结果上调用其他内容之前调用它,因此它没有机会进行您想要的优化.
但是,请参阅第2929行:方法get_value_for_datastore 确实完全符合您的要求!
具体来说,而不是son.father.key(),使用Son.father.get_value_for_datastore(son),你应该更高兴的结果;-).
| 归档时间: |
|
| 查看次数: |
550 次 |
| 最近记录: |