【问题标题】:Query GAE Datastore on Transformed Property Values在转换后的属性值上查询 GAE 数据存储
【发布时间】: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


    【解决方案1】:

    AFAIK,是的。他们最终会做同样的事情,这会节省你的写作时间和成本。尽管它会使您的查询运行速度变慢(因为增加了计算),但请注意可能的超时。

    【讨论】:

    • 不确定yes 是什么意思。添加计算属性正是因为“对转换后的值进行查询”否则不可能 - 例如,getDirectory(NDBPath.path) 将在此处失败(因为getDirectory 是用非str 调用的)并且有无法“将函数发送到数据存储区”以帮助您查询!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-06-21
    • 2011-02-10
    • 1970-01-01
    • 1970-01-01
    • 2017-11-19
    • 2019-06-21
    • 1970-01-01
    相关资源
    最近更新 更多