查询转换后的属性值的GAE数据存储区

时间:2014-10-28 19:54:12

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

我在应用引擎上处理Python NDB模型,如下所示:

class NDBPath(ndb.Model):
    path = ndb.StringProperty()
    directory = ndb.ComputedProperty(lambda self: getDirectory(self.path))
    cat = ndb.IntegerProperty(indexed=False)

路径是文件路径,目录是该文件的超级目录,而cat是某个数字。只有在初始加载后才能有效读取这些实体。

我使用各种文件路径查询数据存储区,并且如果a)其路径与查询路径(同一文件)匹配,或者b)如果实体' s,则想要提取实体的cat属性。 directory位于查询路径的超级目录中。所以我最终做了一个像:

这样的查询
NDBPath.query(NDBPath.directory.IN(generateSuperPaths(queriedPath)))

其中generateSuperPaths以查询路径的完整形式列出所有超级目录(例如a/b/c/d.html --> [/a, /a/b, /a/b/c]

因为它们是只读的,所以使用计算属性实际上是浪费写入,因为它永远不会改变。有没有办法根据动态转换的值进行查询,比如

NDBPath.query(getDirectory(NDBPath.path).IN(generateSuperPaths(queriedPath)))

所以我可以保存将目录写为属性并在查询中使用它吗?

1 个答案:

答案 0 :(得分:0)

AFAIK,是的。他们最终会做同样的事情,这将节省你的写作时间和成本。虽然它会使你的查询运行得更慢(因为增加了计算),所以要警惕可能的超时。