본문 바로가기
  • 살짝 구운 김 유나
Web/Django

Django Model 2 - QuerySet API

by yunae 2022. 9. 2.

< 사전 준비 >

 

외부 라이브러리 설치 및 설정

# 파이썬 기본 쉘보다 더 강력한 파이썬 쉘
$ pip install ipython


# Django 확장 프로그램 모음. shell_plus, graph model 등 다양한 확장 기능 제공
$ pip install django-extensions

->  설치한 이후에 settings.py에 django_extensions 등록해주기!

 

 

패키지 목록 업데이트

$ pip freeze > requirements.txt

 

원래는 다음과 같은 명령어를 통해 Django Shell을 사용하지만

$ python manage.py shell

dajngo-extension이 제공하는 더 강력한 shell_plus로 진행

$ python manage.py shell_plus

Django shell 실행)

 

※ shall

: 운영체제 상에서 다양한 기능과 서비스를 구현하는 인터페이스를 제공하는 프로그램

- 셸은 사용자와 운영 체제의 내부사이의 인터페이스를 감싸는 층이기 때문에 그러한 이름이 붙음

 

" 사용자 <-> 셸 <-> 운영체제 "

 

 

 

QuerySet API

 

database API

: Django가 기본적으로 ORM을 제공함에 따른 것으로 DB를 편하게 조작할 수 있도록 도움

- Model을 만들면 Django는 객체들을 만들고 읽고 수정하고 지울 수 있는 DB API를 자동으로 만듬

 

 

 

 

 

database API 구문

 

"objects" manager

: Django 모델이 데이터베이스 쿼리 작업을 가능하게 하는 인터페이스

 

" DB를 python class로 조작할 수 있도록 여러 메서드를 제공하는 manager "

 

 

 

Query

: 데이터베이스에 특정한 데이터를 보여달라는 요청

 "쿼리문을 작성한다." = 원하는 데이터를 얻기위해 데이터베이스에 요청을 보낼 코드를 작성한다.

 

이 때, 파이썬으로 작성한 코드가 ORM에 의해 SQL로 변환되어 데이터 베이스에 전달되며, 데이터베이스의 응답 데이터를 ORM이 QuerySet이라는 자료 형태로 변환하여 우리에게 전달

 

 

 

QuerySet

: 데이터베이스에게서 전달 받은 객체 목록 (순회가 가능한 데이터)- Django ORM을 통해 만들어진 자료형이며, 필터를 걸거나 정렬 등을 수행할 수 있음

 

단, 데이터베이스가 단일한 객체를 반환할 때는 QuerySet이 아닌 모델의 인스턴스로 반환됨

 

 

 

 

QuerySet API

" QuerySet과 상호작용하기 위해 사용하는 도구 (메서드, 연산자 등)"

 

QuerySet API를 활용해 데이터를 생성하고, 읽고, 수정하고 삭제해보기!

 

1. CREATE 

데이터 객체를 만드는 3가지 방법

# 첫번째 방법

# 1.클래스를 통한 인스턴스 생성
article = Article()

# 2. 클래스 변수명과 같은 이름의 인스턴스 변수를 생성 후 값 할당
article.title = 'title'

# 3. 인스턴스로 save 메서드 호출
article.save()



# 두번째 방법

# 인스턴스 생성시 초기 값을 함께 작성하여 생성
article = Article(title='title', content='django!'


# 세번째 방법

# QuerySet API 중 create() 메서드 활용
Article.objects.create(title='title', content='django')

 

.save()

- 객체를 데이터베이스에 저장함

- 데이터 생성 시 save를 호출하기 전까지는 id = None

 

단순히 모델 클래스를 통해 인스턴스를 생성하는 것은 DB에 영향을 미치지 않기 때문에 반드시 호출!

 

 

2. READ

QuerySet API method를 사용해 데이터를 다양하게 조회하기

# 전체 데이터 조회
Article.objects.all()



# 단일 데이터 조회 - get()
'''
객체를 찾을 수 없으면 DoesNotExist
둘 이상의 객체를 찾으면 MultipleObjectsReturned

-> 기본키와 같이 고유성을 보장하는 조회에서 사용해야 함
'''
Article.objects.get(pk=1)



# filter()
# 지정된 조회 매개 변수와 일치하는 객체를 포함하는 새 QuerySet을 반환
Article.objects.filter(content='django!')

Article.objects.filter(title='title')


# filed-lookups
'''
특정 레코드에 대한 조건을 설정하는 방법
QuerySet 메서드 filter(), exclude() 및 get()에 대한 키워드 인자로 지정됨
'''
# content 컬럼에 'dj'가 포함된 모든 데이터 조회
Article.objects.filter(content__contains='dj')

 

3. UPDATE

# 수정하고자 하는 인스턴스 객체를 조회 후 반환 값을 저장
article = Article.objects.get(pk=1)

# 인스턴스 객체의 인스턴스 변수 값을 새로운 값으로 할당
article.title = 'byebye'

# save() 인스턴스 메서드 호출
article.save()

 

4. DELETE

# 삭제하고자 하는 인스턴스 객체를 조회 후 반환 값을 저장
article = Article.objects.get(pk=1)

# delete 메서드 호출
article.delete()

 

 

 

View 함수에서 직접 CRUD 구현하기

 

< 사전 준비>

base 템플릿 작성

추가 경로 작성

 

url 분리 및 연결

 

CRUD 구현!

models.py
urls.py
index.html
detial.html
edit.html
new.html

 

 

 

 

매주 금요일은 프로젝트 하는 날..! 어젯 밤에 공부도 안하고 걱정만 하다가 잤는데,
그래도 자기 직전까지 피피티 본 보람이 있었다! 별다른 도움없이 혼자서 해결 할 수 있어서 다행이었던...
담주 쟁고쟁고는 정신 똑바로 차리고 예습 복습 해야지..!

+ 그리고 정리해놔도 안 볼 줄 알았던 티스토리 참고하면서 했다.(아주 조금이지만) ㅎ 제법 개발자 같은 유나,,ㅎ

 

 

 

 

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

Django Form  (0) 2022.09.07
render vs redirect  (0) 2022.09.05
Form Data 보내고 가져오기  (0) 2022.09.02
Templates Inheritance  (0) 2022.09.01
Django Model 1  (0) 2022.08.31

댓글