0

我对 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:未知配置选项('projection')”?我不能简单地调用直接获取密钥的投影,而不必查询密钥吗?

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

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

提前致谢!

4

1 回答 1

2

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

于 2012-09-09T13:22:20.143 回答