82. 자주 사용하는QuerySet 대상을 되돌려주는 방법은 상세한 설명:all,selectrelated

4090 단어

1. all: 이 ORM 모형의QuerySet 대상을 되돌려줍니다.

articles = Article.objects.all()
print(articles)

from django.http import HttpResponse
from .models import Article, Category


def index(request):
#  select_related() , ,
#  , 
articles = Article.objects.select_related('category')
    for article in articles:
        print(article.category.name)
    print(connection.queries)
    return HttpResponse("success!")

인쇄 결과는 다음과 같습니다.
최신 기사
최신 기사
가장 핫한 문장
[{'sql': 'SELECT @@SQL_AUTO_IS_NULL', 'time': '0.000'}, {'sql': 'SET SESSION TRANSACTION ISOLATION LEVEL READ COMMITTED', 'time': '0.000'}, {'sql': 'SELECT article . id , article . title , article . content , article . category_id , article . create_time , category . id , category . name , category . rating FROM article LEFT OUTER JOIN category ON ( article . category_id = category . id )', 'time': '0.000'}]
마찬가지로 메모리에 넣지 않을 수도 있지만,django 밑바닥에서 더 많은 ql문장을 실행하여 조회할 수 있습니다. 예시 코드는 다음과 같습니다.
from django.http import HttpResponse
from .models import Article, Category


def index(request):
    articles = Article.objects.all()
    for article in articles:
        print(article.category.name)
    print(connection.queries)
    return HttpResponse("success!")

반환된 결과는 다음과 같습니다.
최신 기사
최신 기사
[{'sql': 'SELECT @@SQL_AUTO_IS_NULL', 'time': '0.000'}, {'sql': 'SET SESSION TRANSACTION ISOLATION LEVEL READ COMMITTED', 'time': '0.000'}, {'sql': 'SELECT article . id , article . title , article . content , article . category_id , article . create_time FROM article ', 'time': '0.000'}, {'sql': 'SELECT category . id , category . name , category . rating FROM category WHERE category . id = 1 LIMIT 21', 'time': '0.000'}, {'sql': 'SELECT category . id , category . name , category . rating FROM category WHERE category . id = 2 LIMIT 21', 'time': '0.000'}, {'sql': 'SELECT category . id , category . name , category . rating FROM category WHERE category . id = 3 LIMIT 21', 'time': '0.000'}, {'sql': 'SELECT category . id , category . name , category . rating FROM category WHERE category . id = 1 LIMIT 21', 'time': '0.000'}]
실행된 sql문장에서 알 수 있듯이 all() 방법을 실행하는 sql문장은 더 많은 항목을 실행하기 때문에 조회의 효율을 떨어뜨릴 수 있기 때문에 데이터량이 많지 않고 조회 횟수가 많을 때selectrelated 방법은 연결된 데이터 테이블의 데이터를 메모리에 추출하여 나중에 조회의 효율을 높일 수 있습니다.
주의: 이 방법은 외부 키를 정의한 필드에만 사용할 수 있으며, 외부 키의 관련 대상(표)에만 사용할 수 있으며, 다대다 또는 다대일의 경우 select 를 사용할 수 없습니다.related () 방법입니다.대신 prefetch related를 사용하여 수행해야 합니다.

좋은 웹페이지 즐겨찾기