[TIL.32] Django 2 (model, migrate)
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를 통해서 실제 데이터 베이스에 넘겨주어야 한다.
Author And Source
이 문제에 관하여([TIL.32] Django 2 (model, migrate)), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://velog.io/@jxxwon/TIL.32-Django-2-model-migrate저자 귀속: 원작자 정보가 원작자 URL에 포함되어 있으며 저작권은 원작자 소유입니다.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)