오답노트

[Django] Manager & QuerySet 본문

Python/Django

[Django] Manager & QuerySet

권멋져 2022. 11. 16. 22:30

Manager

Manager는 기본적으로 models.py 내 선언한 클래스는 objects로 사용 가능하다. 하지만 모종의 이유로 할당 받아 사용 할 경우 Manager로 할당하여 사용할 수 있다. 이 때, objects는 사용할 수 없다.

 

test_manager = models.Manager() 

 

위 코드를 models.py의 (models.Model 상속 받은)클래스 내에서 선언하면 test_manager는 objects 처럼 사용 할 수 있다. (단, 기존 object는 사용 불가능)

 

QuerySet

위에서 설명한 Manager는 QuerySet이라는 객체다.

이는 메소드를 통해 테이블의 내용을 조회하거나 추가, 수정, 삭제가 가능하다.

 

기능만 확인하기 위해 웹페이지에 출력하지 않고 장고 쉘을 이용해서 결과를 확인해보려고 한다.

 

프로젝트 파일에서 터미널에 다음과 같이 입력하면 장고 쉘이 실행된다.

 

python manage.py shell

 

위 같이 출력되며 실행된다. 다시 터미널로 돌아가고 싶다면 exit() 또는 quit() 를 입력하자.

 

우선 메소드를 사용하기 위해서는 models.py 에서 클래스를 Import 해야한다.

 

조회

all

테이블 내에 모든 정보를 가져온다.

 

Test 는 클래스명이고 그 뒤는 __str__()로 반환되는 내용이다.

 

order_by

쿼리의 order by 와 같은 결과가 나타난다.

함수의 인자로 컬럼명이 들어가게 되는데, -를 붙히면 descending 으로 정렬한다.

 

filter

filter는 조건에 맞는 정보만 출력해서 보여준다.

이때 함수의 인자로 넣을 때, 인자를 지정하게 되는데, 컬럼명에 __ 를 붙혀서 옵션을 설정할 수 있다.

자세한 옵션은 Doc을 참고하도록 하자.

 

옵션 앞에 i 가 붙으면 대소문자를 모두 비교한다.

 

exact

exact는 쿼리문으로 SELECT ~ FROM WHERE title = '첫번째' 이고

 

 

 

 

contains

contains은 쿼리문으로  SELECT ~ FROM WHERE title LIKE '%째%' 이다.

 

in

in 은 쿼리문으로 SELECT ~ FROM WHERE id IN (1,3) 이다.

 

gt, gte, lt, lte

gt 는 id > 2

gte 는 id >= 2

lt 는 id < 2

ite 는 id <= 2 를 의미한다.

 

startswith, endswith

startswith는 쿼리문으로  SELECT ~ FROM WHERE title LIKE '째%' 이고

endswith는 쿼리문으로  SELECT ~ FROM WHERE title LIKE '%째' 이다.

 

range

range는 쿼리문으로 SELECT ~ FROM WHERE id BETWEEN 1 AND 3 이다.

 

AND (&) OR (|) 연산자

AND, OR 연산자를 사용하는 방법은 세가지가 있다.

첫번째는 & 연산자를 바로 사용하는 법

두번째는 인자로 지정하는 법

세번째는 QuerySet 대상으로 작업하는 것이다.

 

첫번째 경우는 &를 사용했을 때이다.

두번째 경우는 인자로 지정했을 때이다.

OR 연산자는 Q 메소드를 사용해야한다.

 

세번째 경우는 QuerySet 대상으로 작업했을 때이다.

get,first,last

get은 조건에 맞는 행을 출력한다.

first는 가장 처음의 행을, last는 가장 마지막 행을 출력한다.

 

추가

Model 객체에서 save와 create 로 데이터를 추가할 수 있다.

 

 

수정

Model 객체에서 save 또는 QuerySet에서  update 로 데이터를 수정할 수 있다.

 

삭제

QuerySet 객체를 할당해 delete 메소드로 삭제할 수 있다.

'Python > Django' 카테고리의 다른 글

[Django] 기본 View 와 Generic View  (0) 2022.11.19
[Django] Django Form  (1) 2022.11.17
[Django] 모델 관계 설정  (0) 2022.11.15
[Django] Template  (0) 2022.11.15
[Django] View에서 Model 사용하기  (0) 2022.11.15