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>은 옵션이지만 사용하는 것을 권장

마이그레이션 파일 생성 및 적용

  1. 마이그레이션 파일 (초안) 생성하기 : makemigrations 명령
  2. 해당 마이그레이션 파일을 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) 모델 클래스를 수정하여 디폴트 값을 제공
    박건령

    Written by

    박건령

    Welcome to a place where words matter. On Medium, smart voices and original ideas take center stage - with no ads in sight. Watch
    Follow all the topics you care about, and we’ll deliver the best stories for you to your homepage and inbox. Explore
    Get unlimited access to the best stories on Medium — and support writers while you’re at it. Just $5/month. Upgrade