Back-End

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

NIMHO 2023. 7. 18. 11:58
728x90

django

장고로 하나둘씩 model을 만들고 있으니, 생각보다 수정할 일이 많았다.

 

python manage.py makemigrations와 python manage.py migrate

이 두 가지로 해결되는 경우도 있었지만, migrate 하는 경우에 오류가 날 때도 많았다.

이럴 때는 마이그레이션을 초기화해야 한다고 한다.

 

예전엔 구글링 해서 하나하나 했겠지만, 요즘은 ChatGPT에서 물어보면 바로 알려준다.매번 물어볼 수는 없으니, 과정들을 기록으로 남기고자 한다.

 

데이터베이스까지 전부 초기화

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

migrations 폴더 전체를 삭제하면 안 된다.

폴더 안에 __init__.py 파일을 제외하고 나머지를 다 삭제하면 된다.

 

2. 현재 데이터베이스 드랍

 

3. 마이그레이션 생성

처음에 마이그레이션을 생성하듯이 다시 생성하면 된다.

python manage.py makemigrations
python manage.py migrate
728x90

마이그레이션만 초기화

1. 대기 중인 마이그레이션 적용

대기 중인 마이그레이션이 있으면 먼저 적용시켜야 한다.

python manage.py makemigrations

No changes detected가 뜨면 된다.

 

2. 앱 내의 마이그레이션 기록 삭제

현재 상황을 파악해야 한다.

python manage.py showmigrations

여기서 board의 기록을 제거하고자 한다. (board자리에 원하는 app의 이름을 넣으면 된다.)

python manage.py migrate --fake board zero

이후 showmigrations를 다시 실행하면 'X'가 사라진 것을 볼 수 있다.

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

초기화하고자 하는 앱의 migrations 안에 있는 파일들을 삭제해 준다.

이때도 아까와 마찬가지로 __init__.py 파일을 제외하고 모든 삭제하면 된다.

 

다시 show migrations을 실행하면 아래와 같이 뜬다.

posting
     (no migrations)

 

4. 마이그레이션 생성

python manage.py makemigrations

 

5. 마이그레이션 페이크

초기에 생성하는 경우에는 migrate를 그냥 해주면 된다.

하지만 이미 데이터베이스가 존재하고 있기에 migrate를 하면 안 된다.

그렇기에 페이크 마이그레이트를 해주면 된다.

python manage.py migrate --fake-initial

 

해당 순서대로 하면 마이그레이션이 초기화되고 새롭게 할 수 있다.

728x90