我正在app engine上开发一个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是一些数字。在初始加载之后,这些实体实际上是只读的。你知道吗
我用不同的文件路径查询数据存储,如果a)实体的路径与查询到的路径(同一个文件)匹配,或者b)实体的目录位于查询路径的超级目录中,我想提取实体的cat
属性。最后我做了一个查询,比如:
NDBPath.query(NDBPath.directory.IN(generateSuperPaths(queriedPath)))
其中generatesuperspaths以查询路径的完整形式列出所有超目录(例如a/b/c/d.html --> [/a, /a/b, /a/b/c]
)
因为这些是只读的,所以使用computed属性实际上是一种浪费,因为它永远不会改变。有没有什么方法可以基于动态转换的值进行查询,比如
NDBPath.query(getDirectory(NDBPath.path).IN(generateSuperPaths(queriedPath)))
所以我可以把写目录保存为属性,然后在查询中使用它?你知道吗
阿飞,是的。他们最终会做同样的事情,这将节省你的写作时间和成本。尽管这会使查询运行速度变慢(因为增加了计算),但是要小心可能的超时。你知道吗
相关问题 更多 >
编程相关推荐