Django ORM

1153 ワード

Query Set機能

  • Lazy Loading-必要に応じてSQLを呼び出す=必要でない場合はSQLを呼び出さない>querysetを完全に宣言しても、最後に必要な
  • のみを呼び出す
  • キャッシュ:QuerySetキャッシュを再使用すればよい.
  • を呼び出す順序によっては、SQLが異なる場合があります.
  • Eager Loading - N+1 Problem

    queryset = Users.objects.all()
    for user in queryset:
    	users.userinfo
    -->この例では、初期querysetを宣言しますが、for文で新しいsqlを実行し続けます.(sqlはユーザ数で累積)

    QuerySet詳細


  • Querysetは、1つのクエリーと0~Nの追加クエリー(3つ)で構成されています.

  • select related&prefetch related(逆を参照)
  • Model.objests.filter(조건절)
    .select_related('정방향 참조 필드')   		
    .prefetch_related('역방향 참조 필드')
    select * from 'Model' m
    (inner or left outer) join '정방향 참조 필드' r on m.r_id=r.id
    where 조건절
    select * from 역방향 참조 필드 where id in (첫번째 쿼리 결과 id 리스트)
  • prefetch relatedは、追加のクエリーセットです.

  • Query Test


    from django.test.utils import CaptureQueriesContext
    from rest_framework.test import APIClient