73. Python의 ORM 컬렉션 함수 상세 정보: Count
Count: 데이터의 개수를 구하는 데 사용됩니다.
다음 모든 예제에서 사용되는 모델은 다음과 같습니다.
from django.db import models
#
class Author(models.Model):
name = models.CharField(max_length=100, unique=True)
age = models.IntegerField()
email = models.EmailField()
class Meta:
db_table = 'author'
def __str__(self):
return "%s,%s,%s" % (self.name,self.age, self.email)
#
class Publisher(models.Model):
name = models.CharField(max_length=100,unique=True)
class Meta:
db_table = 'publisher'
#
class Book(models.Model):
name = models.CharField(max_length=100, unique=True)
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'
1. 예: 모든 도서의 수량을 구하면views.py 뷰 파일에서는 다음 코드를 사용할 수 있습니다.
from django.http import HttpResponse
from .models import Author,Publisher,Book,BookOrder
from django.db.models import Avg,Count,Sum
from django.db import connection
def index(request):
# 4. , book ID 。
count = Book.objects.aggregate(book_count=Count('id'))
print(count)
# :{'book_count': 4}
return HttpResponse("success !")
2. 같은 책 예약 수량 구하기
from django.http import HttpResponse
from .models import Author,Publisher,Book,BookOrder
from django.db.models import Avg,Count,Sum
from django.db import connection
def index(request):
# 5. , book , bookorder__id, bookorder。 book__order id
books = Book.objects.annotate(books_count=Count('bookorder'))
# print(type(books))
#
# QuerySet
for book in books:
print("%s,%s" % (book.name,book.books_count))
# :
# ,2
# ,2
# ,2
# ,0
# SQL
print(connection.queries)
# :[{'sql': 'SELECT @@SQL_AUTO_IS_NULL', 'time': '0.000'}, {'sql': 'SET SESSION TRANSACTION ISOLATION LEVEL READ COMMITTED', 'time': '0.000'}, {'sql': 'SELECT `book`.`id`, `book`.`name`, `book`.`pages`, `book`.`price`, `book`.`rating`, `book`.`author_id`, `book`.`publisher_id`, COUNT(`book_order`.`id`) AS `books_count` FROM `book` LEFT OUTER JOIN `book_order` ON (`book`.`id` = `book_order`.`book_id`) GROUP BY `book`.`id` ORDER BY NULL', 'time': '0.000'}]
return HttpResponse("success !")
3. 같은 Count()는 매개 변수 distinct를 전달할 수 있습니다. 기본적으로distinct=False.distinct=True를 지정하여 반환 값에서 같은 데이터를 삭제할 수 있습니다.예를 들어 예약된 책이 몇 가지인지 구하려면 예제 코드는 다음과 같습니다.
from django.http import HttpResponse
from .models import Book
from django.db.models import Count
def index(request):
# 6.
# annotate() , 。
book_nums = Book.objects.annotate(book_nums=Count('bookorder', distinct=True))
print(book_nums)
return HttpResponse("success !")
인쇄 결과:
출력된 결과는 QuerySet 객체로 구체적인 데이터 정보를 쉽게 구분할 수 없습니다.따라서 우리는 Book 모델의 __str__(self) 방법으로 다시 쓰기를 진행합니다.
,
,
,
]>
모델의 __ 다시 쓰기str__(self) 메서드:
#
class Publisher(models.Model):
name = models.CharField(max_length=100,unique=True)
class Meta:
db_table = 'publisher'
def __str__(self):
return " ->:%s" % self.name
#
class Book(models.Model):
name = models.CharField(max_length=100, unique=True)
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'
def __str__(self):
return "( :%s, :%s, :%s, :%s, :%s, :%s)" % (self.name, self.pages, self.price, self.rating, self.author, self.publisher)
인쇄 결과:
: )>,
: )>,
: )>,
: )>
]>
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
다양한 언어의 JSONJSON은 Javascript 표기법을 사용하여 데이터 구조를 레이아웃하는 데이터 형식입니다. 그러나 Javascript가 코드에서 이러한 구조를 나타낼 수 있는 유일한 언어는 아닙니다. 저는 일반적으로 '객체'{}...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.