django에서 migration을 추가했다가 모든 것을 리셋해야 하는 경우...
이것저것 건들다가 다 망가진 덕에 멘토님 코멘트도 얻었고, 기록하면 좋을 것 같아 작성하는 블로그 🤣
0
what happend?
products라는 app을 만들고, models.py에서 클래스들을 작성하고 migration작업을 했다.
그러다가, 그냥 삭제하고 C.R.U.D1 과제 예시로 작업하기 위해 models.py의 내용을 수정.
그 상태에서 makemigrations > migration 했더니, 결과적으로 아래와 같은 파일이 2개 생기면서 완전 꼬여버렸다.
그래서 뒤늦게 mysql에서 처음 작성했던 테이블들을 하나씩 drop 했으나 또 잘못 지워서 데이터 추가고 뭐고 아무것도 안됨.
mysql에서 테이블 체크해보면 아래와 같이 다 뒤죽박죽 섞여 있는 상태다.
(models.py에서 users/stars 클래스를 삭제하고, menus/categories/products를 추가했는데 users/stars는 그대로 있고 새로 추가한 menus는 보이지도 않음)
그래서 그냥 여태껏 했던 migration을 다 리셋하기로 했다.
관련 내용은, 여기를 참고했음.
1
how to solve? 1
일단, migration 히스토리를 지우기로 했다.
history를 보는 방법은 다음과 같다.
python manage.py showmigrations
그럼 일단 아래와 같이 뜸.
history를 없애기 위해, 아래와 같이 입력.
python manage.py migrate --fake products(app name) zero
그러면 아래와 같이 바뀐다.
이 상태에서 그냥 products app에 있는 migration 파일을 삭제하면 된다.
2
how to solve? 2
그런데 나의 경우, 만든 데이터베이스 자체도 꼬인 상황이기 때문에
데이터베이스도 리셋해야 했다.
일단 기존에 작성되어 있는 데이터베이스는 drop 한다.
mysql> drop database taskcurd2;
그리고 다시 생성
create database taskcurd2(db name) character set utf8mb4 collate utf8mb4_general_ci;
만들었으면 migrate 진행.
python manage.py makemigrations;
python manage.py migrate;
리셋한 데이터베이스에 들어가서 내용 확인한다.
mysql> use taskcurd2 (db namd);
mysql> show tables;
멘토님 말로는, 일단 models.py 가 변경되었을 때 migrate를 계속 추가하는 것이 맞다고 한다. (git의 commit과 같은 개념)
실제 협업할 때는 다른 개발자들이 같은 migration을 공유하므로, 삭제하면 안된다. 그리고 추가 migration 파일은 이전 버전의 migration에 의존하기 때문에 조심해야.