[장고] 마이그레이션 초기화
Django 프로젝트를 진행하다 보면 마이그레이션 파일이 많아지거나, 큰 변화를 적용해야 할 때가 있다. 이 경우 마이그레이션을 리셋하는 방법을 정확히 알고 있으면 유용하다.
데이터베이스 모두 초기화
이 방법은 개발 단계에서 데이터베이스 데이터를 모두 삭제할 수 있을 때 적합하다.
먼저, 각 앱의 migrations 폴더에서 __init__.py 파일을 제외한 나머지를 삭제한다. 명령어를 이용해 일괄적으로 삭제할 수 있다.
find . -path "*/migrations/*.py" -not -name "__init__.py" -delete
find . -path "*/migrations/*.pyc" -delete
SQLite를 사용하는 경우 db.sqlite3 파일을 삭제한다.
다른 데이터베이스의 경우, 해당 DBMS에 맞는 명령어로 데이터베이스를 드롭한다.
마이그레이션을 새로 생성하고 데이터베이스에 적용한다.
python manage.py makemigrations
python manage.py migrate
이로써 초기화가 완료된다.
데이터베이스 유지, 마이그레이션 기록만 초기화하기
각 앱의 migrations 폴더를 삭제한다. 단, __init__.py 파일은 유지한다.
django_migrations 테이블에서 특정 앱에 대한 기록을 삭제한다. 예를 들면:
DELETE FROM django_migrations WHERE app = '<your_app_name>';
모든 기록을 지우고 싶다면 테이블을 트렁케이트(truncate)할 수도 있다:
TRUNCATE TABLE django_migrations;
새 마이그레이션 파일을 생성한다.
python manage.py makemigrations
이미 테이블이 존재하므로 --fake 옵션을 사용하여 마이그레이션을 적용한다.
python manage.py migrate --fake
이 과정을 통해 환경 간에 마이그레이션 상태가 일치하게 된다.