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의 차이
공통점: 이 두 가지 방법은 모두 집합 함수를 실행할 수 있다.
차이점:
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 집합 함수 내용은 저희 이전의 글을 검색하거나 아래의 관련 글을 계속 훑어보시기 바랍니다. 앞으로 많은 응원 부탁드립니다!
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
Django 라우팅 계층 URLconf 작용 및 원리 해석URL 구성(URLconf)은 Django가 지원하는 웹 사이트의 디렉토리와 같습니다.그것의 본질은 URL과 이 URL을 호출할 보기 함수 사이의 맵표입니다. 위의 예제에서는 URL의 값을 캡처하고 위치 매개 변수로...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.