查询db.Model将检索db.Model的所有属性,无论它们是否必要。还有其他选择吗?

时间:2011-01-21 13:52:09

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

我有db.Model,它有几个属性,如下所述:

class Doc(db.Model): 
    docTitle = db.StringProperty(required=True)
    docText = db.TextProperty()
    docUser = db.UserProperty(required=True)
    docDate = db.DateTimeProperty(auto_now_add=True)

在模板中,我只列出这些文档的名称作为链接。为此,我使用以下查询:

docList = Doc.gql("WHERE docUser = :1 ORDER BY docDate DESC", user)

如您所见,docList包含所有属性(包括“TextProperty”)。但是,我只是在我的视图中使用它的docTitle和key()。

是否有另一种方法可以只检索模型类的请求属性?

如果没有,我是否应该使用PolyModel类通过为docText属性创建另一个模型类来区分Doc模型类的列表和实际用法?

编辑:我在谷歌应用引擎中使用webapp web框架......

1 个答案:

答案 0 :(得分:1)

实体作为序列化协议缓冲区存储在App Engine数据存储区中,这些缓冲区作为单个blob返回,因此无法仅检索其中的一部分。在任何情况下,这只会节省数据存储区和应用程序之间的RPC开销,因此节省的成本很低。

如果每个实体的大小很重要,您可能需要按照建议将模型分开。但是,您不需要(也可能不应该)使用PolyModel - 只需使用两个模型类,即'summary'和'detail'。