我对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()(并获取整个实例),以便它被缓存,而不是投影?
提前致谢!
答案 0 :(得分:2)
根据错误,使用get时投影没有意义。从文档“它只获得投影中这些属性的值。它从查询索引获取此数据(因此,投影中的属性必须被索引)”。所以get不是通过索引访问对象属性。请注意gvr在您引用的问题中对缓存的评论。