0
我有幾個關於NDB投影查詢的工作和緩存的行爲場景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])
爲什麼第一classmethod引發「TypeError:未知配置選項('投影')」?我不能簡單地直接調用一個鍵的投影,而不必查詢一個鍵嗎?
第二,關於緩存,我不知道如果我理解正確的這個線程:NDB Caching When Using Projected Queries
不投影查詢緩存?這是否意味着它更好地簡單地調用一個get()(並獲取整個實例),使其被緩存,而不是投影?
在此先感謝!
好的,也許我對指數有一個誤解。沒有使用Key()。get()使用GAE Keys的索引獲取實例? 例如:Key(Users,1).get()會獲取ID = 1的用戶的整個實例。是不是來自包含Keys的索引? –
投影屬性從索引中檢索。即投影中的所有屬性都必須有索引。 –
Key(Users,1).get()將直接從實體表中獲取實體,而不進行任何索引查找。 – proppy