【发布时间】:2011-03-24 21:14:44
【问题描述】:
在 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
但最近我已经放弃了这种方法,因为bar.parentFoo.key() 每次都会进行子查询来获取 Foo。我现在使用的方法是将每个Foo 键作为字符串存储在Bar.parentFoo 上,这样我就可以将其与someFooKeyFromSomePlace 进行字符串比较,并消除所有子查询开销。
现在我开始研究实体组,想知道这是否是更好的方法?我真的不知道如何使用它们。
至于上述两种方法,我想知道使用它们有什么缺点吗?可以使用存储的密钥字符串卷土重来并在 * * * 中咬我。最后但同样重要的是,有没有更快的方法来做到这一点?
【问题讨论】:
-
你有什么理由不做
Bar.all().filter("parentFoo =", fooKey)还是仅仅因为你对这个问题的简化? -
只是为了这个问题:)
标签: python google-app-engine google-cloud-datastore