python - 实体组、ReferenceProperty 或键作为字符串

标签 python google-app-engine google-cloud-datastore

在 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 中获取键值

参见 Property Class

关于python - 实体组、ReferenceProperty 或键作为字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5425618/

相关文章:

python - 数据库存储 : Why is Pipeline better than Feed Export?

google-app-engine - 在GAE上实现 "local"用户管理

python - 用户的Google NDB数据存储支票帐户/电子钱包。如何计算余额

python - 如何从单个请求中测量/分析 "Datastore Reads/Writes"?

python - 使用kivy和python制作android apk时如何使用request等模块?

Python sed 正则表达式匹配

python - OpenCv Python 颜色检测

python - Google App Engine Blob Store...更改文件大小的语法?

python - 在 Mac 上与 GoogleAppEngineLauncher 配合使用的编辑器

android - 将 google cloud ml 与 Android 应用程序一起使用