문서의 선택한 두 판 사이의 차이를 보여줍니다.
| 양쪽 이전 판이전 판다음 판 | 이전 판 | ||
| python:django:migration [2024/10/15 15:39] – [마이그레이션 기록을 지우고 싶지만 데이터베이스는 유지하고 싶은 경우] taekgu | python:django:migration [2025/04/15 10:05] (현재) – 바깥 편집 127.0.0.1 | ||
|---|---|---|---|
| 줄 1: | 줄 1: | ||
| + | ====== Django 마이그레이션 초기화 ====== | ||
| + | * 참조 - [[https:// | ||
| + | |||
| + | 최근에 django 프로젝트를 진행하다 보니 models.py 부분에 추가로 수정을 할 일이 생겼습니다. | ||
| + | |||
| + | 새로 필드를 추가를 하려면 default 값을 설정해야 된다는 사실을 모르고 오류가 나서 이것 저것 하다가 데이터베이스를 드랍하기도 하는 등 과정을 겪으면서 마이그레이션 초기화하는 방법에 대해서 알아보았습니다. | ||
| + | |||
| + | ===== 데이터베이스를 전부 날려도 되는 경우 ===== | ||
| + | * 프로젝트가 개발 환경에 남아있고, | ||
| + | ==== 1. 프로젝트 안에 있는 모든 마이그레이션 파일을 삭제합니다. ==== | ||
| + | |||
| + | |||
| + | 프로젝트 내의 앱들의 마이그레이션 폴더를 각각 열어 __init__.py 파일을 제외하고 모두 삭제합니다. | ||
| + | |||
| + | ==== 2. 현재 데이터베이스를 드랍합니다. ==== | ||
| + | |||
| + | ==== 3. 첫 마이그레이션을 생성한 뒤 데이터베이스 스키마를 만듭니다. ==== | ||
| + | |||
| + | <code bash> | ||
| + | python manage.py makemigrations | ||
| + | python manage.py migrate | ||
| + | </ | ||
| + | ===== 마이그레이션 기록을 지우고 싶지만 데이터베이스는 유지하고 싶은 경우 ===== | ||
| + | ==== 1. 현재 데이터베이스 스키마에 맞는지 확인합니다. ==== | ||
| + | |||
| + | <code bash> | ||
| + | python manage.py makemigrations | ||
| + | </ | ||
| + | 대기 중인 마이그레이션이 있으면 먼저 적용시킵니다. | ||
| + | |||
| + | <code bash> | ||
| + | No changes detected | ||
| + | </ | ||
| + | 위의 메시지가 나타나면 다음 단계를 진행합니다. | ||
| + | |||
| + | ==== 2. 각각의 앱에서 마이그레이션 기록을 삭제합니다. ==== | ||
| + | |||
| + | |||
| + | 앱에서 마이그레이션 기록을 삭제할텐데 현재 상황을 알 수 있도록 | ||
| + | |||
| + | <code bash> | ||
| + | python manage.py showmigrations | ||
| + | </ | ||
| + | |||
| + | 이제 마이그레이션 기록을 삭제합니다. (posting은 app 이름입니다.) | ||
| + | |||
| + | <code bash> | ||
| + | python manage.py migrate --fake posting zero | ||
| + | </ | ||
| + | 다음 다시 showmigration을 실행해서 확인해봅니다. | ||
| + | |||
| + | <code bash> | ||
| + | posting | ||
| + | [ ] 0001_initial | ||
| + | [ ] 0002_comment | ||
| + | [ ] 0003_auto_20201012_1920 | ||
| + | </ | ||
| + | |||
| + | 위와 같이 X 표시가 사라지고 초기화를 하고 싶은 모든 앱에 이 과정을 거쳐야 합니다. | ||
| + | |||
| + | ==== 3. 실제 마이그레이션 파일 삭제 ==== | ||
| + | |||
| + | 프로젝트 내 앱들의 마이그레이션 폴더를 열어 __init__.py 파일을 제외하고 모두 삭제합니다. | ||
| + | |||
| + | 이제 다시 showmigrations를 실행합니다. | ||
| + | |||
| + | <code bash> | ||
| + | posting | ||
| + | (no migrations) | ||
| + | </ | ||
| + | ==== 4. 첫 마이그레이션을 생성합니다. ==== | ||
| + | |||
| + | <code bash> | ||
| + | python manage.py makemigrations | ||
| + | </ | ||
| + | ==== 5. 첫 마이그레이션을 페이크합니다. ==== | ||
| + | |||
| + | |||
| + | 데이터베이스가 이미 존재하는 상황이기 때문에 마이그레이션을 마이그레이트 하지 않습니다. | ||
| + | 그래서 가짜로 마이그레이트 합니다. | ||
| + | |||
| + | <code bash> | ||
| + | python manage.py migrate --fake-initial | ||
| + | </ | ||
| + | 마지막으로 showmigrations을 실행하여 확인합니다. | ||