在gae平台上构建一些应用程序之后,我通常在数据存储区中的基本上每个应用程序中使用不同模型之间的某种关系.而且我经常发现自己需要查看同一父母的记录(比如匹配同一父母的所有条目)
从一开始我就使用db.ReferenceProperty来实现我的关系,例如:
class Foo(db.Model):
name = db.StringProperty()
class Bar(db.Model):
name = db.StringProperty()
parentFoo = db.ReferanceProperty(Foo)
fooKey = someFooKeyFromSomePlace
bars = Bar.all()
for bar in bar:
if bar.parentFoo.key() == fooKey:
// do stuff
但是最近我放弃了这个approch,因为bar.parentFoo.key()每次都会生成一个子查询来获取Foo.我现在使用的方法是将每个Foo键存储为Bar.parentFoo上的字符串,这样我就可以将它与someFooKeyFromSomePlace进行字符串比较,并消除所有子查询开销.
现在我开始关注实体组,并想知道这是否是更好的方法?我无法弄清楚如何使用它们.
至于上述两种方法,我想知道使用它们有什么缺点吗?可以使用存储的密钥字符串回来并在* * *中对我进行排序.最后但并非最不重要的是有更快的方法来做到这一点?
最佳答案 小费:
更换…
bar.parentFoo.key() == fooKey
与…
Bar.parentFoo.get_value_for_datastore(bar) == fooKey
要避免额外的查找,只需从ReferenceProperty中获取密钥