Django6-Migration
Migrations?
Sep 9, 2018 · 4 min read
- django-south 프로젝트가 킥스타터 펀딩 을 통해, Django 1.7에 포함
- 모델 변경내역 히스토리 관리
- 모델의 변경내역을 Database Schema (데이터베이스 데이터 구조) 로 반영시키는 효율적인 방법을 제공
- db관리자가 따로 있을 경우 기능을 끄기도 함
관련 명령
shell> python manage.py makemigrations <app-name> # 마이그레이션 파일 생성shell> python manage.py migrate <app-name> # 마이그레이션 적용shell> python manage.py showmigrations <app-name> # 마이그레이션 적용 현황shell> python manage.py sqlmigrate <app-name> <migration-name>
# 지정 마이그레이션의 SQL 내역
<app-name>은 옵션이지만 사용하는 것을 권장
마이그레이션 파일 생성 및 적용

- 마이그레이션 파일 (초안) 생성하기 : makemigrations 명령
- 해당 마이그레이션 파일을 DB에 반영하기 : migrate 명령
1의 작업으로 변경 내용을 담은 파일을 만들고
2의 작업으로 그 내용을 db에 반영한다.
모델 내역을 그대로 반영하게 되면 사용자가 원하는 대로 반영되지 않을 수 가 있으나, 위와같이 2단계로 나누어 작업하게 되면 확인 하고 반영할 수 있기 때문에 원래 의도대로 반영할 수 있다.
마이그레이션 Migrate (Forward/Backward)
shell> python manage.py migrate <app-name>미적용 <마이그레이션 파일> 부터 <최근 마이그레이션 파일>까지 “Forward 마이그레이션” 이 순차적으로 수행
shell> python manage.py migrate <app-name> <마이그레이션 파일 명><지정된 마이그레이션 파일>이 <현재 적용된 마이그레이션>보다
- 이후면, “Forward 마이그레이션” 이 순차적으로 수행
- 이전이면, “Backward 마이그레이션” 이 순차적으로 수행 (롤백)
마이그레이션 파일명 지정
전체 파일명을 지정하지 않아도, 유일한 1개의 파일명을 판독 가능할 경우, 파일명 일부로도 지정이 가능
(shell에서의 tab키 기능, 자동완성 기능과 비슷하다)
blog/migrations/0001_initial.py
blog/migrations/0002_create_field.py
blog/migrations/0002_update_field.py
python manage.py migrate blog 000 # FAIL (다수 파일에 해당)
python manage.py migrate blog 100 # FAIL (해당되는 파일이 없음)
python manage.py migrate blog 0001 # OK
python manage.py migrate blog 0002 # FAIL (다수 파일에 해당)
python manage.py migrate blog 0002_c # OK
python manage.py migrate blog 0002_create # OK
python manage.py migrate blog 0002_update # OK
python manage.py migrate blog zero # blog앱의 모든 마이그레이션을 취소
SQLite Browser를 통한 데이터베이스 확인
gui로 sqlite의 데이터베이스 내용을 확인 할 수 있는 프로그램
id필드
- 모든 데이터베이스 테이블에는 각 Row 의 식별기준인 기본키 (Primary Key) 가 필요
- Django 에서는 기본키로서 id 필드( AutoField)가 디폴트 지정
자동으로 증가하는 primary key 필드
- 기본키는 줄여서 pk 로도 접근 가능 (primary key)
필수필드를 추가해 , makemigrations 수행
- 필수 필드는 기존 Row들에 필드를 추가할 때, 어떤 값으로 채워넣을 지 질문한다.
- 선택1) 지금 값을 입력
- 선택2) 모델 클래스를 수정하여 디폴트 값을 제공