[TIL.32] Django 2 (model, migrate)

신지원·2021년 3월 25일
0
post-thumbnail
post-custom-banner

Model

1) 모델 만들기
2) 모델 활성화

1) 모델 만들기
💡 모델이란?

  • 데이터 서비스를 제공하는 레이어이다.
  • 장고의 내장 ORM(SQL을 직접 작성하지 않아도 장고 모델을 통해 데이터베이스로 접근가능하다 예- 조회,추가, 수정, 삭제)
  • 하나의 프로젝트에는 하나의 데이터베이스를 사용한다.
  • 장고의 model은 각 장고 앱안에 기본적으로 생성되는 models.py 안에 정의한다. models.py안에 하나 이상의 class 를 정의할 수 있으며, 하나의 class는 데이터베이스에서 하나의 테이블에 해당된다.
from django.db import models


class Question(models.Model):
    question_text = models.CharField(max_length=200)
    pub_date = models.DateTimeField('date published')


class Choice(models.Model):
    question = models.ForeignKey(Question, on_delete=models.CASCADE)
    choice_text = models.CharField(max_length=200)
    votes = models.IntegerField(default=0)

Django 모델은 "django.db.models.Model" 의 파생 클래스이고,

모델의 필드는 class의 속성으로 표현되며 이는 테이블의 컬럼에 해당된다.
(필드란 데이터베이스 테이블 column을 나타내는 파생 클래스이다. )

즉, 위의 코드에서는 question과 choice의 테이블이 생성된거고 그안의 question_text,pub_date,question,choice_text,votes들은 각 테이블들의 colum이름(=필드)이 된거다.
CharField,DateTimeField등은 필드의 타입이다.
(Primary Key 따로 설정해주지 않으면 pk 역활을 하는 id필드가 자동으로 추가되고, DB 테이블 생성시 자동으로 id칼럼이 생성된다.)

2) 모델 활성화 (데이터베이스 migration)

2-1) Migration 준비 작업

💡 Migration?
장고에서 모델 클래스를 생성하고 나면, 이 모델에 상응하는 테이블을 데이터베이스에 생성해야 한다.
이렇게 python에서 모델 클래스의 수정 및 생성을 데이터 베이스에 적용하는 과정을 migration이라고 한다.

모델을 활성화 하기 위해 우선 프로젝트에 어떤 앱이 생성되어 있는지를 알려주어야 한다.
=> ⭐️ 프로젝트의 settings.py의 INSTALLED_APPS에 생성한 앱을 추가해주면 된다.
(앱이름.apps.클래스명)
여기서 클래스명은 앱/apps.py 파일 내에 존재한다.
이후 python manage.py makemigrations 앱이름 실행
(makemigration: model이 업데이트되었다는 사실과 이러한 변경상황을 migration으로 저장 시키는 것.)
python manage.py migrate 을 통해 데이터베이스에 모델과 관련한 테이블을 생성해준다.
(migrate: db에 넘겨줌)

# 마이그레이션 파일 생성
$ python manage.py makemigrations <app-name>

# 마이그레이션 적용
$ python manage.py migrate <app-name>

# 마이그레이션 적용 현황
$ python manage.py showmigrations <app-name>

# 지정 마이그레이션의 SQL 내역
 python manage.py sqlmigrate <app-name> <migration-name>

✔️ model 다 작성해주면 해야할 일 순서
1. 마이그레이션 파일 (초안) 생성하기 : makemigrations
2. 지정 마이그레이션의 SQL 내역 확인 : sqlmigrate
2. 해당 마이그레이션 파일을 DB에 반영하기 : migrate
(makemigration 했으면 무조건 migrate 해야 완성 데이터 베이스에 적용 되는 것임)

=> 그러니깐...! 모델 파일 다 생성해서 데이터를 만들어 줬으면 migrate를 통해서 실제 데이터 베이스에 넘겨주어야 한다.

post-custom-banner

0개의 댓글