数据存储区ndb,在投影中使用ndb.ComputedProperty查询是安全的吗?

时间:2014-07-15 12:12:51

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

我将缩略图72x72编码的base64存储在ndb.TextProperty()

模型结构类似于:

class Article(ndb.Model):
    title = ndb.StringProperty()
    body = ndb.TextProperty()
    tags = ndb.StringProperty(repeated=True, indexed=True)
    thumbnail = ndb.TextProperty()  
    has_thumbnail = ndb.ComputedProperty(
        lambda self: True if self.thumbnail else False) 
    enable = ndb.BooleanProperty(default=True)   

使用投影进行查询的方法是:

@classmethod
def get_articles(cls):
    q = Aricle.query(
        True == Article.enable,
        projection = [
            Article.title
            Article.has_thumbnail
        ])
     return q.get()

由于ndb.TextProperty()未编入索引,因此我无法在预测中获取它们,因此我尝试使用ndb.ComputedProperty并注意到它正在运行。

我的主要问题是要知道这是否是一种正确的查询方式,基本上我只想要一个查询来返回文章的标题和缩略图,或者知道文章是否有缩略图。

1 个答案:

答案 0 :(得分:2)

这是正确的,计算属性将适用于投影查询。

唯一需要注意的是,查询将使用持久保存到数据存储的计算属性值。因此,如果您刚刚添加了计算属性,则它将不会出现在先前添加的实体的数据存储中;你需要重新设置这些实体以保留新的属性。