TIL 09. Django_Query Set model method(QuerySet이 반환되는 경우)

Drageon Lee·2021년 10월 24일
0

TIL_Django

목록 보기
1/8

Today's topic

👉 자주 사용되는 Query Set model method의 종류 및 특징

1️⃣ QuerySet이 반환되는 경우의 주요 method
2️⃣ QuerySet이 반환되지 않는 경우의 주요 method(다음 편에서)
3️⃣ filter()와 get()의 차이점(다음 편에서)

1️⃣ QuerySet이 반환되는 경우의 주요 method

  • all()
    한 테이블 내의 모든 한 레코드를 가져올 때 사용. all() method는 QuerySet을 반환하며, QuerySet 안에는 각각 인스턴스가 포함되어 있음.
    인스턴스들이 담겨 있는 QuerySet이 반환되기 때문에, 모든 속성에 접근해서 데이터를 관리할 수 있음.
    In  : Product.objects.all()
    Out : <QuerySet [<Product: Product object (1)>, <Product: Product object (2)>, <Product: Product object (3)>, <Product: Product object (4)>, <Product: Product object (5)>, <Product: Product object (6)>, <Product: Product object (7)>, <Product: Product object (8)>, <Product: Product object (9)>, <Product: Product object (10)>, <Product: Product object (11)>, <Product: Product object (12)>, <Product: Product object (13)>, <Product: Product object (14)>, <Product: Product object (15)>, <Product: Product object (16)>, <Product: Product object (17)>, <Product: Product object (18)>, <Product: Product object (19)>, <Product: Product object (20)>]
    In  : for product in Product.objects.all()
    	print(product.english_name)
    Out : Nitro Vanilla Cream
          Nitro Cold Brew
          Dolce Cold Brew
          Vanilla Cream Cold Brew
          ...
          Orange juice
  • filter() & exclude()
    한 테이블의 특정 레코드를 가져오려면 필터를 사용할 수 있다. filter() method는 가장 자주 사용하는 필터 기능이다. filter(**kwargs): 키워드 인자로 주어진 lookup 조건에 일치하는 레코드들의 QuerySet을 반환한다.
    **case1**
    In  : Product.objects.filter(category_id=2)
    Out : [<Product: Product object (8)>, <Product: Product object (9)>]
    **case2**
    In  : Product.objects.filter(category_id=2).filter(english_name='Iced coffee')
    Out : <QuerySet [<Product: Product object (8)>]>
    **case3**
    In  : Product.objects.filter(category_id=2).exclude(english_name='Iced coffee')
    Out : <QuerySet [<Product: Product object (9)>]>
  • values()
    iterable로 사용될 때 모델 인스턴스가 아닌 dictionary을 포함하는 QuerySet을 반환함.
    In  : Product.objects.filter(category_id = 2)
    Out : [<Product: Product object (8)>, <Product: Product object (9)>]
    In  : Product.objects.filter(category_id = 2).values()
    Out : <QuerySet [{'id': 8, 'korean_name': '아이스 커피', 'english_name': 'Iced Coffee', 'description': '깔끔하고 상큼함이 특징인 시원한 아이스 커피', 'category_id': 2}, {'id': 9, 'korean_name': '오늘의 커피', 'english_name': 'Brewed Coffee', 'description': '신선하게 브루드(Brewed)되어 원두의 다양함이 살아있는 커피', 'category_id': 2}]>
  • values_list()
    values_list() method는 dictionary를 반환하는 대신 반복 될 때 튜플을 반환한다는 점을 제외하면 values ()와 유사합니다. 각 튜플에는 values_list () 호출에 전달 된 각 필드 또는 표현식의 값이 포함되어 있으므로 첫 번째 항목이 첫 번째 필드입니다.
    In  : Product.objects.filter(category_id = 2).values_list()
    Out : <QuerySet [(8, '아이스 커피', 'Iced Coffee', '깔끔하고 상큼함이 특징인 시원한 아이스 커피', 2), (9, '오늘의 커피', 'Brewed Coffee', '신선하게 브루드(Brewed)되어 원두의 다양함이 살아있는 커피', 2)]>

My opinion

QuerySet이 반환되는 경우에 대해 주요 method에 대해 알아보았다. 각 method 마다 QuerySet이 반환되거나 안되는 경우가 있어서 사용시 주의를 해야할 것 같다. 다음 편에서 QuerySet이 반환 안되는 경우에 대해 알아볼 것 이다.

profile
운동하는 개발자

0개의 댓글

관련 채용 정보