我在应用引擎上处理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)))
所以我可以保存将目录写为属性并在查询中使用它吗?
答案 0 :(得分:0)
AFAIK,是的。他们最终会做同样的事情,这将节省你的写作时间和成本。虽然它会使你的查询运行得更慢(因为增加了计算),所以要警惕可能的超时。