在 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
进行字符串比较,并且摆脱所有子查询开销。
现在我开始研究实体组,想知道这是否是更好的方法?我真的不知道如何使用它们。
至于上述两种方法,我想知道使用它们有什么缺点吗?可以使用存储的 key 字符串卷土重来并在 * * * 中咬我。最后但同样重要的是,有没有更快的方法来做到这一点?
最佳答案
提示:
替换...
bar.parentFoo.key() == fooKey
与...
Bar.parentFoo.get_value_for_datastore(bar) == fooKey
为了避免额外的查找,只从 ReferenceProperty
中获取键值
关于python - 实体组、ReferenceProperty 或键作为字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5425618/