본문 바로가기

문돌이 존버/Django 스터디

Django migration 초기화 진짜 해결법! (linux 버전 포함)

반응형

장고 모델링을 설정하고 마이그레이션까지 마쳤는데 이후 작업을 할 때 추가하거나 삭제하고 싶은 필드가 있을 것입니다. 저도 매번 실수를 하는 바람에 작업 중간중간에 수정을 해야 할 때가 많았습니다. 하지만 필드를 새로 추가하거나 삭제할 경우, 장고 시스템은 분명 디폴트 값을 요구할 것입니다. 이번에는 디폴트 값 설정 없이 마이그레이션을 초기화하는 방법에 대해 알아보겠습니다.

구글링을 하면 장고 마이그레이션 초기화를 설명한 분들이 꽤 계시는데요. 제가 시도해봤지만 시간이 오래 지난 것들이라 그런지 초기화가 잘 되지 않았습니다. 그러다가 shrhkddh님의 블로그 글을 발견했고 제 궁금증을 해결할 수 있었습니다. 저와 같이 해메고 있을 분들을 위해 그 방법을 설명드리겠습니다.

먼저, 프로젝트 앱의 migrations 폴더 아래 py 파일들은 __init__.py 파일을 제외하고 다 삭제해주시기 바랍니다. 리눅스 서버를 사용하시는 분의 경우, 파일 삭제 명령어는 rm "파일명.파일 확장자" 입니다. 아래의 경우에는 0001_initial.py 파일만 지우면 되겠네요. __pycache__ 폴더는 건드리지 않아도 될 듯 합니다. 

이후 아래 명령어를 통해 마이그레이션을 모두 초기화합니다. chatbot_app 부분은 각자 앱의 이름을 입력하시면 되겠죠~ 

python manage.py migrate --fake chatbot_app zero

여기서 추가로 db_sqlite3 파일도 지워야 제대로 마이그레이션을 초기화할 수 있습니다. 참고로 저는 우분투 리눅스 서버에서 장고의 디폴트 db인 sqlite3가 아닌 MySQL을 사용하고 있는데요. 이럴 경우 아래와 같은 명령어를 통해 db를 삭제하고 다시 생성하면 됩니다. 별도의 user 아이디를 생성하셨다면 root 대신 해당 아이디를 적어주세요.

sudo mysql -u userid(or root) -p
mysql> drop database "DB 이름";
mysql> create database "DB 이름";
quit;

모두 작업을 완료했다면 python manage.py showmigrations 를 통해 확인해보세요. 순서대로 잘 따라하셨다면 아래와 같은 화면을 볼 수 있을 것입니다.

이제 다시 마이그레이션과 마그레이트를 할 차례입니다. 위와 같이 초기화가 잘 되었다면 우리가 맨 처음 모델 설정을 하고 마이그레이션할 때와 같은 아래 화면을 볼 수 있습니다.

python manage.py makemigrations
python manage.py migrate

728x90
반응형