zoukankan      html  css  js  c++  java
  • django-ORM相关代码及其sql执行次数

    1.普通情况:通过log可以看出,这种情况下,访问了1次数据库

    def test(request):
        """测试连表"""
        users = rbac_models.UserInfo.objects.all()
        for user in users:
            print(user.username)
            print(user.password)
            print(user.nickname)
            print(user.email)
    
        return HttpResponse("OK")

    控制台:

    2.普通情况:访问外键,可以看出,访问了4次数据库

    def test(request):
        """测试连表"""
        users = rbac_models.UserInfo.objects.all()
        for user in users:
            print(user.username)
            print(user.usertype.name)
        return HttpResponse("OK")

    3.使用selected_related,主动连表查询,可以看出,访问了1次数据库

    def test(request):
        """测试连表"""
        users = rbac_models.UserInfo.objects.all().select_related("usertype")
        for user in users:
            print(user.username)
            print(user.usertype.name)
        return HttpResponse("OK")

    4.连表降低性能,我们可以使用被动连表查询prefetch_related,可以看到访问了数据库2次,查询n个外键字段时,访问n+1次数据库.

    def test(request):
        """测试连表"""
        users = rbac_models.UserInfo.objects.all().prefetch_related("usertype")
        for user in users:
            print(user.username)
            print(user.usertype.name)
        return HttpResponse("OK")

     

  • 相关阅读:
    CC2540-BLE4.0 学历笔记1之串口体验
    cc2530的PWM实现
    用qt写的一个简单到不能在简单的上位机
    在Kubuntu14.04中安装小企鹅输入法
    初始化umi项目
    工具杂记(三) -- zookeeper
    工具杂记(二) -- Centos7
    工具杂记(一) -- vagrant
    (一)Docker导学
    JVM随笔(二)之搜索类
  • 原文地址:https://www.cnblogs.com/jec1999/p/7642944.html
Copyright © 2011-2022 走看看