【发布时间】:2014-10-28 19:54:11
【问题描述】:
我正在应用引擎上开发一个 Python NDB 模型,如下所示:
class NDBPath(ndb.Model):
path = ndb.StringProperty()
directory = ndb.ComputedProperty(lambda self: getDirectory(self.path))
cat = ndb.IntegerProperty(indexed=False)
Path 是文件路径,directory 是该文件的超级目录,cat 是某个数字。这些实体仅在初始加载后才有效读取。
我使用各种文件路径查询数据存储,并希望提取实体的 cat 属性,如果 a) 其路径与查询的路径(同一文件)匹配,或者 b) 如果实体的目录位于查询的路径。所以我最终做了如下查询:
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)))
所以我可以将目录保存为属性并在查询中使用它?
【问题讨论】:
标签: python google-app-engine app-engine-ndb google-cloud-datastore