我有四种模式:
用户 - >有一个档案
个人资料 - >有一个居民
居民 - >属于许多个人资料
数据库 - >属于一个居民
鉴于用户对象,我想检索间接属于用户对象的数据库对象。
我已经可以按照我的数据库架构执行此操作:
profile = user.profile
dweller = profile.dweller
database = Database.objects.get(dweller_id=dweller.id)
它正常工作但是我想知道这是否是最优雅和更好的性能方式,我的意思是,当python执行 profile = user.profile 时,配置文件对象来自数据库查询所有居民数据(通过JOIN),或仅当python执行 dweller = profile.dweller 代码行(使用另一个JOIN)时才检索居民数据?
我担心的是,如果每个代码行向Database提交一个新查询,如果我可以使用QuerySet来浓缩这个查询,我不知道会更好吗?如果是这样的话,我怎么能这样做?这会改善性能吗?多次连续查询的连接握手可能会减慢我的整个过程?
Django新手在这里,谢谢你。
答案 0 :(得分:1)
您的代码将针对profile
,dweller
和database
执行3个单独的查询。如果您不需要其他模型,可以将其减少为包含多个JOIN
的单个查询:
database = Database.objects.get(dweller__profile__user=user)
lookups that span relationships上的文档对此进行了详细说明。