Intro
웹 어플리케이션을 개발할 때 다양한 데이터를 DB에 저장합니다.
이때 저장하는 DB에 상관없이 Model 클래스만 작성해주면 Django에서 선택한 DB에 맞는 SQL문을 작성해주는 ORM (Object Relational Mapping) 기능이 있습니다.
ORM 기능을 통해 모델 코드 변경 없이 모든 DB에 동일한 소스를 사용할 수 있으며, 애플리케이션 코드를 편리하게 유지보수 할 수 있습니다.
이번 시간에는 Django의 Model 작성 방법과 마이그레이션을 통한 ORM 기능 사용 방법에 대해 알아보겠습니다.
Database 생성
화면 우측 상단의 Database 탭을 열어주고 + 키를 누른 뒤 원하는 DB를 선택합니다.
저는 SQLite로 진행하도록 하겠습니다.
클릭하면 아래와 같은 창이 뜨는데, DB 이름과 저장할 파일명을 설정해줍니다.
아래에 Download missing driver files라는 메시지가 뜨면 Download버튼을 클릭해주세요.
설정 후 Test Connection을 눌렀을 때 Succeded라는 메시지가 나오면 OK를 클릭해줍니다.
성공적으로 DB가 생성되었다면 Terminal에서 아래의 명령어를 입력합니다.
python manage.py migrate
처리가 끝날때 까지 기다린 후 DB를 새로고침 해보면 아래와 같이 파이썬 코드가 DB 구조로 변환된 것을 볼 수 있습니다.
Model 작성
이제 ORM을 사용하기 위해 모델 클래스를 작성해줘야 합니다.
모델 클래스는 아래의 조건을 만족해야 합니다.
- models.py 내부에 선언되어야 한다.
- models.Model 클래스를 상속받아야 한다.
- 필드는 models.~Field로 초기화되어야 한다.
위의 조건을 만족하도록 간단한 Book 클래스를 모델로 추가해보겠습니다.
reviews APP 내부의 models.py에 Book 모델을 추가해줍니다.
models.py
from django.db import models
class Book(models.Model):
title = models.CharField(max_length=70)
publication_date = models.DateField()
isbn = models.CharField(max_length=20)
마이그레이션
models.py에 추가 또는 삭제된 상항이 있다면 이를 파일로 생성해줘야 합니다.
이전에 Book 모델을 추가해주었으므로 추가한 내역을 파일로 생성해줘야 합니다.
생성 명령어는 아래와 같습니다.
python manage.py makemigrations [APP 이름]
예를 들어 저와 같이 APP 이름을 reviews로 설정하셨다면 아래의 명령어를 실행시키면 됩니다.
python manage.py makemigrations reviews
명령어를 실행하면 migrations 디렉터리에 0001_initial.py라는 파일이 생긴것을 확인할 수 있습니다.
※생성된 파일의 이름이나 내용은 절대 수정해선 안됩니다.
파일이 정상적으로 생성되었다면 아래의 명령어를 실행해 SQLite DB에 반영해줍니다.
python manage.py migrate [APP 이름]
명령어 실행 후 DB를 새로고침하면 아래와 같이 reviews_book 테이블이 자동으로 생성된것을 확인할 수 있습니다.
이렇게 힌번 생성한 모델은 DB가 바뀌어도 Model의 변경 없이 설정만 바꿔주면 해당 DB에 맞게 관리해주어 유지보수가 매우 편리해집니다.
이상으로 DB 생성과 모델 작성, 마이그레이션 하는 방법에 대해 알아보았습니다.
질문이나 개선사항은 언제든지 댓글로 남겨주세요.
이상으로 포스팅을 마치겠습니다.
'Study > Django' 카테고리의 다른 글
[Django] 7. Model 관계 (1:1, 1:N, M:N) 설정 (0) | 2021.11.17 |
---|---|
[Django] 5. 템플릿 설정 및 렌더링 (0) | 2021.11.16 |
[Django] 4. URL GET 파라미터 값 획득하기 (0) | 2021.11.16 |
[Django] 3. View 작성 및 URL Mapping (0) | 2021.11.16 |
[Django] 2. Django 프로젝트 구성 (0) | 2021.11.16 |