美文网首页
django select_related prefetch_r

django select_related prefetch_r

作者: 米斯特_李 | 来源:发表于2019-11-06 14:31 被阅读0次

    (1)、也就是说使用select_related()方法一次性的把Book关联的对象都查询出来放入对象中,再次查询时就不需要再连接数据库,节省了后面查询数据库的次数和时间。

    (2)、当我们想通过Publisher查询出版的书的时候(反向查)
        publisher_queryset = Publisher.objects.get(id=1)
        info = publisher_queryset.p_book_set.all()
        print(info)# 访问一次
        print(info)# 再次访问
        通常情况来讲,调用可调用的属性每次都会访问数据库
        我们可以通过prefetch_related来进行优化:

    sql1: SELECT `django_learn_publisher`.`id`, `django_learn_publisher`.`name`, `django_learn_publisher`.`num_awards` FROM `django_learn_publisher`; 
    sql2 : SELECT `django_learn_book`.`id`, `django_learn_book`.`name`, `django_learn_book`.`pages`, `django_learn_book`.`price`, `django_learn_book`.`rating`, `django_learn_book`.`publisher_id`, `django_learn_book`.`pubdate` FROM `django_learn_book` WHERE `django_learn_book`.`publisher_id` IN (1, 2, 3, 4, 5);
    解释: prefetch_related 采用的是用in的方式将数据全部取出,而如果不使用prefetch方式是sql采用的是where id = x的方式,一条一条请求数据库将数据取出。

    相关文章

      网友评论

          本文标题:django select_related prefetch_r

          本文链接:https://www.haomeiwen.com/subject/xehefctx.html