[Error] dJango - migrate 했는데 'No migrations to apply' 일 경우!

Hailee·2020년 12월 2일
2

[ TIL ]

목록 보기
25/40
post-thumbnail

Question

한창 신나게 dJango shell로 데이터를 집어넣으면서 과제 진행중이었는데
충격적이게도 마지막 AllergyDrink테이블의 drinks컬럼이 생성되지 않은 상황!

차분하게 migrations 디렉토리 내 migration 파일을 삭제하고, 다시 makemigrations, migrate를 진행했더니

👆🏻 자꾸 No migrations to apply라고 하는 것이 아닌가ㅠㅠ
게다가 저 위에 Add Field는 왜 자꾸 makemigrations 할 때마다 뜨는 건지...

혼자서 새벽 네시까지 생각을 해봤다.

  1. 내가 지시한적 없는 Add Field 작업을 하면서 AllergyDrink 테이블 관련 작업이 진행되지 않는건가?
  2. DB에서 직접 Drop 했는데 왜 migrate 할 때 models.py 내 테이블 Create코드와 충돌이 나지 않는가?


Answer

아침이 되고 멘토님께 질문을 해보니 원인은 DB내에 존재하는 migrations 파일에 있었던 것!

1. Add Field?

dJango는 자체적으로 models.py 파일을 읽어서 내가 settings.py에 지정해둔 DB 내에 테이블을 생성해준다.

👆🏻 Category 테이블은 생성했지만, Menu 테이블을 참조하겠다는 FK는 생성되지 않은 상태!

하지만 이 이후로 Category를 참조하는 다른 테이블들이 생성될 때
Category 테이블이 FK로 참조할 Menu테이블과 관련된 컬럼 생성을 해야
데이터들 간의 구조가 완성이 된다


👆🏻 그래서 dJango에서 도중에 Add Field 작업을 해주는 것!
내가 코드를 입력하고 잘못 치고 그런 문제가 아닌,
dJango의 기능이다


2. No Migrations to apply

MySQL에서 django_migrations를 확인해보면
내가 지금까지 migratemigration파일 목록을 조회할 수 있다.

현재 보이는 건 0001_initial.py 파일!
문제는 파일명... 이었다고 해야하나 아무튼 이 파일이 문제였다!

난 계속 migrations 디렉토리 안에 있는 migration 파일을 삭제하고 다시 migrate를 진행했었는데
이렇게 하면 매번 생기는 파일명은 모두 0001_initial.py 파일!

dJango에서 생성해준 해당파일과 이름만 일치한다면, 그 속 내용을 보지 않는다고 한다.
이말인즉슨, 내가 아무리 models.py내에서 수정을 하고 migrate를 해도
이미 DB 내 migrations와 관련된 테이블 내에 0001_initial.py 라는 파일명이 존재하기 때문에 작업이 먹히지 않는 것!

👆🏻 멘토님이 0001_initial.py 파일 내 AllergyDrink테이블 생성 구문을 주석처리해주셨더니
DB에 존재하는 테이블과 비교해서 새로 추가된 코드라고 인식된건지

드디어! create 구문이 제대로 먹히기 시작했다.
아무래도 맨 처음에 models.py를 작성할 때 컬럼을 create하는 부분에 있어서 문제가 있었던 건지..

그 때 이후로 지우고 추가하고 볶고 암만 난리를 쳐도
이미 DB 내 migrations 테이블에 migration파일이 존재하기 때문에 추가로 migrate가 되지 않았던 것!


무섭다고 손 안댈것이 아니라, (안전한 지도하에 ^^)
migrations파일을 보는 것도 중요할 것 같다고 느낀 아침이었다...

profile
웹 개발 🐷😎👊🏻🔥

2개의 댓글

comment-user-thumbnail
2021년 3월 11일

좋은정보 감사합니다! 멘토님 부럽네요 ㅎㅎ

1개의 답글