728x90
목차
1. 사전 준비
2. QuerySet API
3. CRUD
1. 사전 준비
우선 시작하기에 앞서 편의를 위한 추가 라이브러리 설치해주자!
pip install ipython # 파이썬 기본 쉘보다 더 강력한 파이썬 쉘
pip install django-extensions # Django 확장 프로그램 모음으로 shell_plus, graph model 등 다양한 확장 기능 제공
pip freeze > requirements.txt
Shell
- 운영체제 상에서 다양한 기능과 서비스를 구현하는 인터페이스를 제공하는 프로그램
- 셀(껍데기)은 사용자와 운영 체제의 내부 사이의 인터페이스를 감싸는 층이기 때문에 이러한 이름이 붙었다.
- "사용자 <-> 셸 <-> 운영체제"
Python Shell
- 파이썬 코드를 실행해주는 인터프리터
- 인터프리터 : 코드를 한 줄 씩 읽어 내려가며 실행하는 프로그램
- 인터렉티브 혹은 대화형 shell 이라고 부름
- Python 명령어를 실행하여 그 결과를 바로 제공
Django shell
- ORM 관련 구문 연습을 위해 파이썬 쉘 환경을 사용
- 다만 일반 파이썬 쉘을 통해서는 장고 프로젝트 환경에 영향을 줄 수 없기 때문에 Django 환경 안에서 진행할 수 있는 Django 쉘을 사용
python manage.py shell_plus
2. QuerySet API
# Database API
- Django가 기본적으로 ORM을 제공함에 따른 것으로 DB를 편하게 조작할 수 있도록 도움
- Model을 만들면 Django는 객체들을 만들고 읽고 수정하고 지울 수 있는 DB API를 자동으로 만든다.
"objects" manager
- Django 모델이 데이터베이스 쿼리 작업을 가능하게 하는 인터페이스
- Django는 기본적으로 모든 Django 모델 클래스에 대해 objects라는 Manager 객체를 자동으로 추가
- 이 Manager(objects)를 통해 특정 데이터를 조작(메서드)할 수 잇음
- "DB를 Python class로 조작할 수 있도록 여러 메서드를 제공하는 manager"
# Query
- 데이버베이스에 특정한 데이터를 보여 달라는 요청
- "쿼리문을 작성한다" = 원하는 데이터를 얻기 위해 데이터베이스에 요청을 보낼 코드를 작성
- 이때, 파이썬으로 작성한 코드가 ORM에 의해 SQL로 변환되어 데이터베이스에 전달되며, 데이터베이스의 응답 데이터를 ORM이 QuerySet이라는 자료 형태로 변환하여 우리에게 전달
QuerySet
- 데이터베이스에게서 전달받은 객체 목록(데이터 모음)
- 순회가 가능한 데이터로써 1개 이상의 데이터를 불러와 사용할 수 있음
- Django ORM을 통해 만들어진 자료형이며, 필터를 걸거나 정렬 등을 수행할 수 있음
- "objects" manager를 사용하여 복수의 데이터를 가져오는 queryset metod를 사용할 때 반환되는 객체
- 단, 데이터베이스가 단일한 객체를 반환할 때는 QuerySet이 아닌 모델의 인스턴스로 반환됨
- 즉, querySet과 상호작용하기 위해 사용되는 도구
3. CRUD
- Create / Read / Update / Delete
- 생성 / 조회 / 수정 / 삭제
- 대부분의 컴퓨터 소프트웨어가 가지는 기본적인 데이터 처리 기능 4가지를 묶어서 일컫는 말
CREATE
데이터 객체를 생성하는 방법은 아래 3가지가 있다.
# 첫 번째 방법
1. article = Article()
- 클래스를 통한 인스턴스 생성
2. article.title
- 클래스 변수명과 같은 이름의 인스턴스 변수를 생성 후 값 할당
- 인스턴스 생성 시 초기 값을 함께 작성하여 생성한다.
3. article.save()
- 인스턴스로 save 메서드 호출.
- 반드시 save 메서드를 호출하여야 비로소 DB에 데이터가 저장된다. (레코드 생성)
- 여기서 DB 테이블의 칼럼 이름이 id임에도 pk를 사용할 수 있는 이유는 Django가 제공하는 shortcut 때문
# 두 번째 방법
- 인스턴스 생성 시 초기 값을 함께 작성하여 생성한다.
# 세 번째 방법
- QuerySet API 중 create() 메서드 활용
# .save()
- "Saving object"
- 객체를 데이터베이스에 저장함
- 데이터 생성 시 save를 호출하기 전에는 객체의 id 값은 None
- id 값은 Django가 아니라 데이터베이스에서 계산되기 때문
- 단순히 모델 클래스를 통해 인스턴스를 생성하는 것은 DB에 영향을 미치지 않기 때문에 반드시 save를 호출해야 테이블에 레코드가 생성됨
READ
- QuerySet API method를 사용해 데이터를 다양하게 조회하기
- 크게 2가지로 분류된다.
- Methods that "return new querysets"
- Methods that "do not return querysets"
# all()
- QuerySet return
- 전체 데이터 조회
# get()
- 단일 데이터 조회
- 객체를 찾을 수 없으면 DoesNotExist 예외를 발생시키고, 둘 이상의 객체를 찾으면 MultipleObjectsReturned 예외를 발생시킴
- 위와 같은 특징을 가지고 있기 때문에 primary key와 같이 고유성(uniqueness)을 보장하는 조회에서 사용해야 함
# filter()
- 지정된 조회 매개 변수와 일치하는 객체를 포함하는 새 QuerySet을 반환
# Field lookups
- 특정 레코드에 대한 조건을 설정하는 방법
- QuerySet 메서드 filter(), exclude() 및 get()에 대한 키워드 인자로 지정됨
- 다양한 built-in lookups는 공식문서 참고
- https://docs.djanggoproject.com/en/3.2/ref/models/querysets/#field-lookups
Update
# 과정
- 수정하고자 하는 article 인스턴스 객체를 조회 후 반환 값을 저장
- article 인스턴스 객체의 인스턴스 변수 값을 새로운 값으로 할당
- save() 인스턴스 메서드 호출
Delete 과정
- 삭제하고자 하는 article 인스턴스 객체를 조회 후 반환 값을 저장
- delete() 인스턴스 메서드 호출
# 참고 __str__()
- 표준 파이썬 클래스의 메서드인 str()을 정의하여 각각의 object가 사람이 읽을 수 있는 문자열을 반환(return)하도록 할 수 있음
- 작성 후 반드시 shell 재시작해야 반영
728x90
'Back-end > Django' 카테고리의 다른 글
[Django] CRUD_with_view_functions2 + Admin (0) | 2022.09.05 |
---|---|
[Django] CRUD_with_view_functions1 (0) | 2022.09.05 |
[Django] Model (0) | 2022.09.04 |
[Django] NameSpace (0) | 2022.09.03 |
[Django] URL's (0) | 2022.09.03 |