NDB投影&缓存问题

时间:2012-09-09 12:38:42

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

我对NDB投影查询的工作方式以及缓存在幕后的行为方式有一些疑问

所以给出了一个类似的模型:

class Users(ndb.Model):
    user_name = ndb.StringProperty(required=True)
    user_email = ndb.StringProperty(required=True)
    user_password = ndb.StringProperty(required=True)

    @classmethod # THIS ONE DOES NOT WORK
    def get_profile_info(cls, id):
        return ndb.Key(Users, id).get(projection=[Users.user_name])

    @classmethod # THIS ONE WORKS
    def get_profile_info(cls, id):
        return Users.query(Users.key == ndb.Key(Users, id)).get(projection=[Users.user_name])

为什么第一个类方法会引发" TypeError:未知配置选项('投影')"?我不能简单地在直接获取密钥上调用投影,而不必查询密钥吗?

其次,关于缓存,我不确定我是否正确理解了这个帖子:NDB Caching When Using Projected Queries

Aren的预计查询缓存了吗?这是否意味着更好地简单地调用get()(并获取整个实例),以便它被缓存,而不是投影?

提前致谢!

1 个答案:

答案 0 :(得分:2)

根据错误,使用get时投影没有意义。从文档“它只获得投影中这些属性的值。它从查询索引获取此数据(因此,投影中的属性必须被索引)”。所以get不是通过索引访问对象属性。请注意gvr在您引用的问题中对缓存的评论。