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")

     

  • 相关阅读:
    MYSQL[34]
    MYSQL[32]
    mysql字符集的问题
    MYSQL[31]
    开源RPC框架简介
    MYSQL[35]
    版本号的表示方法
    MYSQL[29]
    MYSQL[39]
    hdu 1166【树状数组】
  • 原文地址:https://www.cnblogs.com/jec1999/p/7642944.html
Copyright © 2011-2022 走看看