ReferenceProperty在处理两个模块之间的引用方面非常有帮助。例如:
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。
- 要获取特定用户实例管理的'teams',我们使用user_instance.teams并进行迭代。
是不是看起来很简单易懂?
如果要使用NDB进行相同操作,则需要进行修改:
db.ReferenceProperty(UserProf, collection_name='teams')
--> ndb.KeyProperty(kind=UserProf)
team_ins.manager_name.get()
会给您提供经理名称。要获取特定用户管理的所有团队,我们需要执行以下操作:
for team in Team.query(Team.manager_name == user_ins.key): print "team name:", team.name
正如您所看到的,在db中处理这些情况看起来比ndb更容易和可读。
- 为什么在ndb中删除了ReferenceProperty?
- 即使是db的查询user_instance.teams,也会像在ndb的for循环中所做的那样执行相同的操作。但在ndb中,我们明确地提到使用for循环。
- 当我们执行user_instance.teams时,背后发生了什么?
预先感谢您的帮助。
entity.keyproperty.get().somevalue1
将首次获取由keyproperty
引用的实体,在随后的entity.keyproperty.get().somevalue2
和entity.keyproperty.get().somevalue3
中将不会进行数据库调用吗? - Vinod Kumar