[Django] Django 마이그레이션 초기화

hukim·2020년 10월 12일
1

Django

목록 보기
3/12
post-custom-banner

최근에 django 프로젝트를 진행하다 보니 models.py 부분에 추가로 수정을 할 일이 생겼습니다.

새로 필드를 추가를 하려면 default 값을 설정해야 된다는 사실을 모르고 오류가 나서 이것 저것 하다가 데이터베이스를 드랍하기도 하는 등 과정을 겪으면서 마이그레이션 초기화하는 방법에 대해서 알아보았습니다.

데이터베이스를 전부 날려도 되는 경우

  • 프로젝트가 개발 환경에 남아있고, 전부 초기화 하기를 바라는 경우

1. 프로젝트 안에 있는 모든 마이그레이션 파일을 삭제합니다.

프로젝트 내의 앱들의 마이그레이션 폴더를 각각 열어 __init__.py 파일을 제외하고 모두 삭제합니다.

2. 현재 데이터베이스를 드랍합니다.

3. 첫 마이그레이션을 생성한 뒤 데이터베이스 스키마를 만듭니다.

python manage.py makemigrations
python manage.py migrate

마이그레이션 기록을 지우고 싶지만 데이터베이스는 유지하고 싶은 경우

1. 현재 데이터베이스 스키마에 맞는지 확인합니다.

python manage.py makemigrations

대기 중인 마이그레이션이 있으면 먼저 적용시킵니다.

No changes detected

위의 메시지가 나타나면 다음 단계를 진행합니다.

2. 각각의 앱에서 마이그레이션 기록을 삭제합니다.

앱에서 마이그레이션 기록을 삭제할텐데 현재 상황을 알 수 있도록

python manage.py showmigrations

이제 마이그레이션 기록을 삭제합니다. (posting은 app 이름입니다.)

python manage.py migrate --fake posting zero

다음 다시 showmigration을 실행해서 확인해봅니다.

posting
[ ] 0001_initial
[ ] 0002_comment
[ ] 0003_auto_20201012_1920

위와 같이 X 표시가 사라지고 초기화를 하고 싶은 모든 앱에 이 과정을 거쳐야 합니다.

3. 실제 마이그레이션 파일 삭제

프로젝트 내 앱들의 마이그레이션 폴더를 열어 __init__.py 파일을 제외하고 모두 삭제합니다.

이제 다시 showmigrations를 실행합니다.

posting
 (no migrations)

4. 첫 마이그레이션을 생성합니다.

python manage.py makemigrations

5. 첫 마이그레이션을 페이크합니다.

데이터베이스가 이미 존재하는 상황이기 때문에 마이그레이션을 마이그레이트 하지 않습니다.
그래서 가짜로 마이그레이트 합니다.

python manage.py migrate --fake-initial

마지막으로 showmigrations을 실행하여 확인합니다.

post-custom-banner

0개의 댓글