티스토리 뷰
저번 시간에 model을 다루게 되면서 DB를 맛보게 되었다. 오늘은 데이터를 가공하는 과정을 거쳐볼 것이다. admin을 통해 데이터를 생성할 수 있지만, 나중에 배우게 될 데이터 간의 관계와 호출에서 사용이 되기 때문에 기초를 잘 다룰줄 알아야 응용이 된다.
ORM (Object-Relational-Mapping)
: 객체 지향 프로그래밍 언어를 사용하여 호환되지 않는 유형의 시스템 간에 데이터를 변환하는 기술
: 데이터베이스 쿼리를 추상화하여 Django 개발자가 데이터 베이스와 직접 상호작용 하지 않아도 가능하도록 만듦
: 데이터베이스와의 결합도를 낮추고 개발자가 직관적이고 생산적으로 개발할 수 있도록 도움
QuerySet API
: Django에 내장된 ORM으로 데이터를 검색, 필터링, 정렬 및 그룹화 하는 데 사용하는 도구로 API를 사용해 SQL이 아닌 Python 코드로 데이터를 처리
: Python의 모델 클래스와 인스턴스를 활용해 DB에 데이터를 저장, 조회, 수정, 삭제 하는 것(CRUD)
Query 문
: '쿼리문을 작성한다' 라고 하며 원하는 데이터를 얻기 위해 데이터 베이스에 요청을 보낼 코드를 작성
: 파이썬으로 작성한 코드가 ORM에 의해 SQL에서 해석되는 언어로 변환되어 데이터베이스에 전달, 데이터베이스의 응답 데이터를 ORM이 QuerySet이라는 자료 형태로 변환하여 반환
QuerySet
: 데이터베이스에서 전달 받은 객체 목록(데이터 모음)
- > 순회가 가능한 데이터로써 1개 이상의 데이터를 불러와 사용할 수 있음
: Django ORM을 통해 만들어진 자료형
단, 데이터베이스가 단일 객체를 반환 할 때는 QuerySet이 아닌 모델(Class)의 인스턴스로 반환
QuerySet API 실습 사전 준비
새로운 라이브러리를 설치했다면 반드시 해야하는 과정은 pip freeze > requirements.txt 로 설치 라이브러리 목록을 갱신해주기!
Django shell
: Django 환경 안에서 실행되는 python shell
+ 추가 라이브러리
shell 환경에서 도움되는 자동 완성 기능을 사용하기 위해서다. 물론 다른 기능을 갖고 있지만, 주로 사용하게 될 것은 자동 완성 기능이다
CRUD 중 Create 과정
데이터 객체를 생성하는 3가지 방법
첫번째 : model class를 호출하여 비어있는 model instance를 생성하고 데이터를 채워넣는 방식
article에 데이터를 채워넣어도 최종저장 상태가 아닌 임시 저장인 상태다. 따라서 save 함수를 사용해서 저장을 명시해주어야 저장이 된다.
여기서 주의해야할 점은 데이터 베이스에 저장이 되었다고해서 같은 article 변수로 객체 저장을 하게되면 앞의 데이터를 덮어진다. 이 경우 shell_plus 환경을 종료한 후에 다시 접근하거나, 다른 저장방식을 사용, article_2 변수 등 다른 방법을 사용해서 추가 저장을 진행해 줄 수 있다.
두번째 : 인스턴스를 할당하지 않고 바로 데이터 삽입
첫번째와 과정은 거의 동일하다.
세번째 : 앞서 두가지 방법과 달리 데이터 생성과 저장을 동시에 진행하는 방법
save함수 대신 create함수를 통해 데이터를 바로 생성할 수 있다.
그러면 가장 편한 방법인 create를 쓰면 될까? 괜히 3가지를 배운게 아니다. 정답은 상황에 따라 다르다. 단순히 데이터를 생성하는 것이라면 세번째 방식을 채택하면 된다. 하지만 생각해보자
게시글에 포함될 수 없는 내용이나 올바른 호출인지 확인해야 한다
생성과 동시에 데이터에 저장이 되어버린다면 해당 객체가 올바른 객체인지 확인할 수 있는 타이밍이 없다. 앞서 첫번째, 두번째는 save함수 직전 임시저장을 통해 데이터를 검증할 수 있는 타이밍이 생기게 된다. 따라서 첫번째 혹은 두번째 방법이 권장된다.
CRUD 중 Read 과정
대표적인 조회 method는 3가지로 전체 조회(all), 특정 조건 조회(filter), 단일 데이터 조회(get)이 있다
- all() : 전체 데이터를 조회하며 새로운 QuerySet 반환 데이터가 있다
- filter() : 특정 조건 데이터를 조회하며 새로운 QuerySet 반환 데이터가 있다
- get() : 단일 데이터를 조회하며 QuerySet이 아닌 객체를 반환한다
하지만 이전에 title이 'second'인 데이터를 조회하면 어떻게 될까? 가장 먼저 나오는 데이터가 출력 될까?
이번에는 없는 데이터를 조회해보자.
이러한 오류를 피하기 위해 primary key 와 같이 고유성(uniqueness)을 보장하는 조회 방식을 사용해야만 한다
CRUD 중 UPDATE 과정
데이터 수정은 간단하다. 데이터에 접근하고 인스턴스 변수를 직접 해주면 된다.
당연히 save() 까지 해주어야 데이터 베이스에 반영되므로 저장 후 확인해보면
CRUD 중 Delete 과정
항상 CRUD 중 가장 쉬운 것은 Delete인 것 같다. Update와 동일하게 인스턴스를 조회하고 delete() 함수를 실행시켜주면 삭제가 된다.
전체 쿼리셋을 불러들어오면 객체 1번이 삭제된 것을 확인할 수 있다.
이후에 데이터를 조회하면?
이후에 데이터를 생성하면 pk=1로 채워질까 아니면 pk=5로 생성될까? 모르면 해보는게 답이다.
이렇게 ORM, QuerySet API로 데이터를 CRUD 하는 방법을 알아봤다. 사실 처음 배울때는 굉장히 복잡하고 어지러운데 복습을 하다보면 한번에 혈이 뚫리는 기분이다. 조금만 더 힘내보자.
'일상코딩 > 노트' 카테고리의 다른 글
Django : Authentication system 2 (0) | 2024.04.01 |
---|---|
Django : Authentication system 1 (0) | 2024.03.29 |
Django : Model (0) | 2024.03.20 |
Django : URLs (0) | 2024.03.20 |
Django : Form Data (0) | 2024.03.19 |
- Total
- Today
- Yesterday
- 연산자
- Method
- Python
- 삼성청년SW아카데미
- SQL
- basic syntax
- ChatGPT
- views.py
- Component
- 백준
- 함수
- 카운팅정렬
- 순열
- Authentication System
- refactoring
- honeymoney
- 재귀
- vue3
- vue
- Sequence types
- HTML
- Django
- dfs
- JavaScript
- SQLite
- CodeTree
- ssafy
- Database
- app
- baby-gin
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | ||||
4 | 5 | 6 | 7 | 8 | 9 | 10 |
11 | 12 | 13 | 14 | 15 | 16 | 17 |
18 | 19 | 20 | 21 | 22 | 23 | 24 |
25 | 26 | 27 | 28 | 29 | 30 | 31 |