Django 집합 함수의 구체적인 사용

4741 단어 Django집합 함수

앞말


orm모델의 집합 함수와 MySQL의 집합 함수 작용은 일치하고Sum,Avg,Count,Max,Min도 있습니다.

집합 함수


모든 집합 함수는django에 놓여 있습니다.db.모델 아래.또한 집합 함수는 단독으로 실행할 수 없으며, 집합 함수는aggregate 방법을 통해 이루어진다.집합 함수의 용법을 설명할 때 다음과 같은 모델 대상을 바탕으로 이루어진다.

class Author(models.Model):
     """ """
     name = models.CharField(max_length=100)
     age = models.IntegerField()
     email = models.EmailField()

     class Meta:
         db_table = 'author'


 class Publisher(models.Model):
     """ """
     name = models.CharField(max_length=300)

     class Meta:
         db_table = 'publisher'


 class Book(models.Model):
     """ """
     name = models.CharField(max_length=300)
     pages = models.IntegerField()
     price = models.FloatField()
     rating = models.FloatField()
     author = models.ForeignKey(Author,on_delete=models.CASCADE)
     publisher = models.ForeignKey(Publisher, on_delete=models.CASCADE)

     class Meta:
         db_table = 'book'


 class BookOrder(models.Model):
     """ """
     book = models.ForeignKey("Book",on_delete=models.CASCADE)
     price = models.FloatField()

     class Meta:
         db_table = 'book_order'

Avg


Avg: 평균값을 구합니다.예를 들어 모든 도서의 가격 평균치를 얻으려고 한다.그러면 다음 코드로 실현할 수 있습니다.

 from django.db.models import Avg
 result = Book.objects.aggregate(Avg('price'))
 print(result)
위의 인쇄 결과는 다음과 같습니다.
 {"price__avg":23.0}
여기서 price__avg의 구조는field__avg 규칙으로 구성되어 있습니다.기본 이름을 수정하려면 키워드 매개 변수에 Avg 값을 지정할 수 있습니다.예제 코드는 다음과 같습니다.

 from django.db.models import Avg
 result = Book.objects.aggregate(my_avg=Avg('price'))
 print(result)
위의 인쇄 결과는
 {"my_avg":23} 

Count


Count: 지정된 객체의 수를 가져옵니다.예제 코드는 다음과 같습니다.

 from django.db.models import Count
 result = Book.objects.aggregate(book_num=Count('id'))
위의result는 도서표에 모두 몇 권의 도서가 있는지 되돌려 줍니다.
Count 클래스에는 distinct라는 또 다른 매개 변수가 있습니다. 기본값은 False와 같고, True와 같으면 중복된 값을 제거합니다.예를 들어 작성자 표에 중복되지 않는 메일박스가 모두 몇 개인지 얻으려면 다음과 같은 코드를 통해 실현할 수 있다.

from djang.db.models import Count
result = Author.objects.aggregate(count=Count('email',distinct=True))

Max 및 Min


Max 및 Min: 지정된 객체의 최대 및 최소 값을 가져옵니다.예를 들어 Author표를 얻으려면 가장 큰 나이와 가장 작은 나이가 각각 얼마입니까?그러면 다음 코드를 통해 수행할 수 있습니다.

from django.db.models import Max,Min
result = Author.objects.aggregate(Max('age'),Min('age'))
만약 가장 큰 나이가 90이라면, 가장 작은 나이는 10이다.그러면 위의 결과는 다음과 같습니다.
{"age__max":90,"age__min":10}

Sum


Sum: 객체의 합계를 지정합니다.예를 들어 도서의 판매 총액을 요구한다.다음 코드를 사용하여 수행할 수 있습니다.

from djang.db.models import Sum
result = Book.objects.annotate(total=Sum("bookorder__price"))
이상의 코드 annotate는 Book 테이블에 조회할 때 total이라는 필드를 추가한다는 뜻입니다. 이 필드의 데이터 출처는 Book Order 모델의price의 총체에서 나온 것입니다. 

aggregate와 annotate의 차이


공통점: 이 두 가지 방법은 모두 집합 함수를 실행할 수 있다.
차이점:
  • aggregate는 하나의 사전을 되돌려줍니다. 이 사전에 저장된 것은 이 집합 함수가 실행한 결과입니다.annotate는 QuerySet 대상을 되돌려주고 찾은 모델에 집합 함수의 속성을 추가합니다..
  • aggregate는 그룹을 만들 수 없습니다. annotate는 그룹by 자구를 사용하여 그룹을 구성합니다. 그룹by 자구를 호출해야만 모든 데이터에 집합 함수의 값을 구할 수 있습니다
  • F 표현식:


    F 표현식: 필드의 값을 동적으로 가져옵니다.그리고 이 F 표현식은 진정으로 데이터베이스에 가서 데이터를 조회하지 않는다. 그는 단지 표지의 역할을 하는 것과 같다.예를 들어 원래의 모든 도서의 가격을 원래의 기초 위에서 10위안을 늘리려면 다음과 같은 코드를 사용하여 실현할 수 있다.
    
    from django.db.models import F
    Book.objects.update(price=F("price")+10) 

    Q 표현식


    Q 표현식: Q 표현식 패키지 조회 조건을 사용하여 조건 간에 다양한 조작을 할 수 있습니다.및/또는 비등하여 복잡한 조회 조작을 실현합니다.예는 다음과 같습니다.
    100개 이상의 가격과 4.85개 이상의 도서를 검색합니다.
    
      #  Q 
      books = Book.objects.filter(price__gte=100,rating__gte=4.85)
      #  Q 
      books = Book.objects.filter(Q(price__gte=100)&Q(rating__gte=4.85))
    
    가격이 100위안 이하이거나 평점이 4점 이하인 도서를 찾습니다.
    
    books = Book.objects.filter(Q(price__gte=100)&Q(rating__gte=4.85))
    
    수령 가격이 100보다 크고, 도서 이름에'전서'자가 포함되지 않은 도서:
    
    books = Book.objects.filter(Q(price__gte=100)&~Q(name__icontains=' '))
    이 Django 집합 함수에 대한 구체적인 사용에 관한 글은 여기까지 소개되었습니다. 더 많은 Django 집합 함수 내용은 저희 이전의 글을 검색하거나 아래의 관련 글을 계속 훑어보시기 바랍니다. 앞으로 많은 응원 부탁드립니다!

    좋은 웹페이지 즐겨찾기