ReferenceProperty在處理兩個模塊之間的引用時非常有用。福克斯例如:App引擎中的db.ReferenceProperty()與ndb.KeyProperty
class UserProf(db.Model):
name = db.StringProperty(required=True)
class Team(db.Model):
manager_name = db.ReferenceProperty(UserProf, collection_name='teams')
name = db.StringProperty(required=True)
- 得到 'MANAGER_NAME' 與團隊的實例,我們使用team_ins.manager_name。
- 要獲得由特定用戶實例管理的「團隊」,我們使用user_instance.teams並迭代。
難道看起來不容易理解嗎?
在使用NDB做同樣的事情,我們必須修改
db.ReferenceProperty(UserProf,集合名稱= '團隊') - > ndb.KeyProperty(KIND = UserProf)
- team_ins。 manager_name.get()會給你經理的名字
要得到所有團隊,由特定用戶的經理,我們要做的
球隊在Team.query(Team.manager_name == user_ins.key): (格式是這裏不工作)
print "team name:", team.name
正如你可以看到處理這些類型的場景看起來比分貝NDB更容易和可讀性。
- 在ndb中刪除ReferenceProperty的原因是什麼?
- 即使db的查詢user_instance.teams也會像在ndb的for循環中做的那樣做。但是在ndb中,我們明確提到使用for循環。
- 當我們做user_instance.teams時幕後發生了什麼?
在此先感謝..
謝謝。 ndb與db相同,但它是顯式的,用戶將會知道get()操作。這種情況沒有性能改進。我已閱讀關於ndb異步,還沒有使用它。 – rajpy
@Tim和Guido,您可以推薦使用類似於http://code.google.com/p/google-app-engine-samples/中的ndb編寫的示例應用程序。以及在基於ndb的應用程序中遵循的最佳實踐。這會有很大的幫助。謝謝。 – rajpy
調用'entity.keyproperty.get()。somevalue1'將在後續的'entity.keyproperty.get()。somevalue2'和'entity.keyproperty.get()。somevalue3'中首次獲取'keyproperty'引用的實體。不會讓數據庫調用? –