Django - QuerySet

김현우·2020년 8월 21일
0

django

목록 보기
4/6

오늘은 Django에서 쓰이는 QuerySet에 대하여 알아봅시다.😀

QuerySet이란?


Database에서 전달받은 모델의 객체 목록(list)이자, DB(SQL)에서는 row를 의미

Python으로 작성한 코드가 SQL로 mapping되어 QuerySet이라는 자료 형태로 값이 넘어온다
queryset 의 특이한 점은 Lazy 한 특성을 가지고 있다는 것!!!

따라서, 실제 데이터를 가져오려면(fetch), QuerySet을 iterate시켜야 함.

for account in account_set:
		print(account.name)
from .models import Account
Account.object.all() # Account 모델의 모든 데이터를 가져오자!

>> <QuerySet [<Account: 계정1>, <Account: 계정2>]>

objects는 ModelManager이며, Database와 Django Model 사이의 인터페이스 역할을 한다. 이때, 반환되는 객체가 QuerySet이다.

Account.objects의 의미는, objects라는 이름의 manager가 Account DB를 QuerySet형태로 만들겠다는 뜻!

QuerySet Method

QuerySet안에 있는 객체에 접근할 때에는 value에 접근하는지, dictionary의 요소에 접근하는지 등에 따라서 접근 방식이 다릅니다.

Account라는 클래스가 있다고 가정하고 사용하여 보겠습니다.

Account.odjects.all()

  • 모든 객체(데이터)를 리스트 형태로 return
  • <variable name>[index]로 접근이 가능

Account.objects.filter()

  • 특정 데이터로 필터링해서 가져옴
  • 인자로는 필드명=조건값 이 들어가며 2개 이상 들어갈 경우, 두 조건을 and로 묶어줌
  • <variable name>[index]로 접근이 가능

Account.objects.values()

  • 쿼리셋의 내용을 딕셔너리로 각 객체정보를 갖는 리스트 형태로 반환
  • QuerySet()은 리스트이고, 객체는 dictionary 이므로 <variable name>[index]['key'] 형식으로 value값에 접근이 가능

Account.objects.exclude()

filter 와 상반되는 개념으로, 필드명=조건값 으로 들어오는 인자를 제외한 나머지 값들을 가져옴

Account.odjects.get(id = 1)

  • 필드명 = 조건값 를 인자로 가지며, 해당 하는 데이터가 유일하게 존재해야함.
  • 0개이거나 2개 이상이면 에러가 발생.
  • 해당 요소가 없을 때는, DoesNotExist 에러 발생!
  • 하나의 객체로 반환되므로 .으로 접근 가능

객체 삭제하는 법!!

객체를 삭제할 때에는 먼저 해당 포스트를 get() 메소드로 불러온 다음, delete()메소드로 삭제할 수 있음!

b = Account.objects.get(id=1)

b.delete()
profile
코딩을 잘하는 개발자가 되자!

0개의 댓글