파이썬/장고 웹서비스 개발 완벽 가이드 with 리액트 강의를 듣고 정리한 글입니다.
: 모델의 변경내역을 데이터베이스 스키마로 반영시키는 명령
# 마이그레이션 파일 생성
python manage.py makemigrations <app_name>
# 지정 DB에 마이그레이션 적용
python manage.py migrate <app_name>
# 마이그레이션 적용 현황 출력
python manage.py showmigrations <app_name>
# 지정 마이그레이션의 SQL 내역 출력
python manage.py sqlmigrate <app_name> <migration_file_name>
언제 makemigrations를 하는가?
모델 필드 관련된 어떠한 변경 사항이라도 발생 시에 마이그레이션 파일을 생성하자.
실제로 DB 스키마에 가해지는 변화가 없더라도 수행하라
마이그레이션 파일은 모델의 변경사항을 누적하는 역할이다.
스키마의 변화만 기록하기에 절대로 삭제하면 안된다
makemigrations
명령에 의해 자동으로 생성된다.python manage.py makemigrations <app_name>
python manage.py showmigrations <app_name>
python manage.py sqlmigrate <app_name> <migration_file_name>
python manage.py migrate <app_name>
python manage.py migrate <앱이름>
# 정방향으로 순차작으로 수행하는 명령이다.
python manage.py migrate <앱이름> <마이그레이션-이름>
# 지정된 <마이그레이션-이름>이 현재 적영된 마이그레이션보다
# 이후라면, 정방향으로 순차적으로 지정 마이그레이션까지 수행
# 이전이라면, 역방향으로 순처작으로 지정 마이그레이션 이전까지 수행
다음과 같이 마이그레이션 파일 1~5까지만 DB에 적용되어 있다고 하자.
1[x], 2[x], 3[x], 4[x], 5[x], 6[ ], 7[ ]
python manage.py migrate <앱이름>
명령을 수행하면 6이 적용되고 7이 적용된다.python manage.py migrate <앱이름> <마이그레이션-이름>
)을 적용하면 6, 7이 순차적으로 적용된다.python manage.py migrate <앱이름> <마이그레이션-이름>
)을 적용하면 5, 4가 순차적으로 취소된다.0001_initial.py
가 있다면 0001
까지만 지정하면 된다. 다만 0001
로 시작하는 파일이 2개가 있다면 Fail이다.python manage.py migrate <app_name> zero
를 실행하면 앱의 모든 마이그레이션을 rollback한다.서버에 바로 반영하지 말고, 하나의 마이그레이션으로 합쳐서 적용하기를 권장
squashmigrations 명령을 통해 미적용 마이그레이션을 모두 합친다.