select_related prefetch_related

Posted huangxuanya

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了select_related prefetch_related相关的知识,希望对你有一定的参考价值。

    # select_related与prefetch_related
# # select_related帮你直接连表操作 查询数据 括号内只能放外键字段
# # res = models.Book.objects.all().select_related(‘publish‘)
# # for r in res:
# # print(r.publish.name)
# # res = models.Book.objects.all().select_related(‘publish__xxx__yyy__ttt‘)
# # print(res)
# # res = models.Book.objects.all()
# """
# select_related:会将括号内外键字段所关联的那张表 直接全部拿过来(可以一次性拿多张表)跟当前表拼接操作
# 从而降低你跨表查询 数据库的压力
#
# 注意select_related括号只能放外键字段(一对一和一对多)
# res = models.Book.objects.all().select_related(‘外键字段1__外键字段2__外键字段3__外键字段4‘)
# """
# # prefetch_related 不主动连表
# res = models.Book.objects.prefetch_related(‘publish‘)
# """
# 不主动连表操作(但是内部给你的感觉像是连表操作了) 而是将book表中的publish全部拿出来 在取publish表中将id对应的所有的数据取出
# res = models.Book.objects.prefetch_related(‘publish‘)
# 括号内有几个外键字段 就会走几次数据库查询操作
# """
# for r in res:
# print(r.publish.name)
#

以上是关于select_related prefetch_related的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 select_related

orm的select_releated和prefetch_releated介绍

Django 管理员内联:select_related

如何使用'select_related'从相关(ForeignKey)django模型中接收并非所有字段

ORM数据库查询优化only与defer(select_related与prefetch_related)

如何强制 Django Admin 使用 select_related?