django의 집합, 그룹 조회 - annotate

10122 단어 django
django의 집합, 그룹 조회 - annotate
  • SQL 쿼리 실행 순서
  • order by(검색 결과 정렬)
  • django의 집합, 그룹 조회 - annotates
  • SQL 쿼리 실행 순서
    3、select ...     from   
    1、where ...
    2、group by ...
    4、having ...
    5、order by ...
    6、limit ...
    

    order by (질의 결과 정렬)
    1. order by         
    2.     
    	1、 ASC(  ) :  
    	2、 DESC :  
    

    django의 집합, 그룹 조회 - annotates
    1. 로그가 다음과 같이 정의되어 있다고 가정합니다.
    1.  :
    	levelname:
    		DEBUG
    		INFO	
    		WARNING
    		CRITICAL
    	status:
    		newTask -    
    		executeTask -    
    		finishTask -    
    		failTask -     
    		backTask -     	
    2.    : %(asctime)s --- %(levelname)s ---%(message)s
                                                       
    createTime---levelName---status---appName---arrangeTime---userName---serialNumber
     :
    2019-01-25 17:00:00,619---INFO---newTask---         ---00:02:00---jack---10000
    2019-01-25 17:02:00,619---INFO---executeTask---     ---null---tom---10001
    2019-01-25 17:03:00,619---INFO---backTask---     ---null---tom---10002
    2019-01-25 17:04:00,619---WARNING---failTask---         ---null---jack---10003
    2019-01-25 17:05:00,619---INFO---finishTask---        ---00:03:00---tom---10004
    

    2. django 데이터 모델 구축
    from django.db import models
    
    # Create your models here.
    class info(models.Model):
        #  createTime     - -     
        time = models.CharField(max_length=15)
        createTime = models.DateTimeField()
        createSeconds = models.FloatField(default=0)
        levelName =  models.CharField(max_length=30)
        status = models.CharField(max_length=30)
        appName = models.CharField(max_length=50)
        arrangeTime = models.CharField(max_length=30)
        userName = models.CharField(max_length=30)
        serialNumber = models.CharField(max_length=30)
        #     log      
        seek = models.IntegerField(default=0)
    
        def __str__(self):
            return self.appName
    

    3. 집합, 그룹 조회 - annotate info.objects.filter(status=“finishTask”).values(“appName”,“status”).annotate(Count("serialNumber")는
    SELECT `index_info`.`appName`, `index_info`.`status`, COUNT(`index_info`.`serialNumber`) AS `serialNumber__count` FROM `index_info` WHERE `index_info`.`status` = finishTask GROUP BY `index_info`.`appName`, `index_info`.`status` ORDER BY NULL
    
  • Filter(조건) = where 조건
  • values(필드 1, 필드 2) = select 필드 1, 필드 2
  • values(필드 1, 필드 2).annotate (집합 함수 (필드 3): 그룹 by 필드 1, 필드 2 를 실행한 다음 집합 함수 (필드 3)
  • 를 실행합니다.
    info.objects.filter(status=“finishTask”).values(“appName”,“status”).annotate(Count(“serialNumber”)).order_by("-appName") [:2]는
    SELECT `index_info`.`appName`, `index_info`.`status`, COUNT(`index_info`.`serialNumber`) AS `serialNumber__count` FROM `index_info` WHERE `index_info`.`status` = finishTask GROUP BY `index_info`.`appName`, `index_info`.`status` ORDER BY `index_info`.`appName` DESC  LIMIT 2
    
  • order_by("-appName") [:2] = order by 필드 DESC limit 수치
  • 좋은 웹페이지 즐겨찾기