알아두면 좋은 migrations 명령어

1. python manage.py showmigrations => 현재 migrations이 어떻게 진행되었는지 눈으로 바로 보여준다. 

2. python manage.py migrate libs [특정 번호] => 특정 번호로 migration을 roll back해준다. 
-> 여기서 libs는 app 이름이다.

3. python manage.py makemigrations => migrations 파일을 만들어준다.

4. python manage.py migrate => migrations 파일을 직접 DB에 적용시켜준다.

 

최근에 migrations까지 적용한 이후에 적용되었던 테이블을 지운 경우가 있었다.

그래서 내가 원했던 것은 이 테이블을 다시 생성해주기 위해서 다시 migrate를 해주는 것이었다.

근데 migrate를 해보면 migrate를 할게 없다고 나온다. => python manage.py showmigrations으로 보아도 적용이 된 것으로 나온다.

( 아니 나는 테이블이 없다고 ㅠㅠ)

 

그래서 시도한 방법은 libs를 통해서 되돌리는 것이다.

그래서 libs로 그 이전 migrations으로 되돌려보니 근데 이것도 미치는게.... 이런 상황일 경우 이미 지워진 테이블이라 Unknown 테이블이라고 하면서 돌리지도 못한다. ㅠㅠ

하 그래서 해당 migrations 파일을 지우고 다시 생성했다. python manage.py makemigrations

오 그러니깐 migrations 파일이 다시 생성되었고 다시 python manage.py migrate를 돌려주었다.

이런 경우 아무리 해당 migrations 파일을 지우고 makemigrations으로 생성해봐도 이미 migration이 적용되었다고 나오고, migrate를 돌려도 no change deteched라고 나온다. ㅠㅠ 

 

이미 시간을 많이 사용했고 혼도 났다 .... 흑흑 ...


결론적으로 알게 된 것은 
django 모델 테이블 안에  django_migrations이라는 폴더가 있다

 

해당 폴더는 현재 db에서 migrations이 어디까지 진행 되었는지 기록되어 있다.

python manage.py showmigrations 할 때 나오는 것도 여기를 바탕으로 보여준다.

 

위와 같이 미치는 상황에 이럴 때 활용해야 되는게 django_migrations이라는 폴더이다. 

 

여기에서 기록을 지워주면 바로 마이그레이션 적용되었던 것이 없어진다. python manage.py showmigrations을 해봐도 기존에 적용되었던 부분이 없어진 것을 확인할 수 있다.

이것만 지우고 다시 migrate하면 끝... ㅠㅠ 

 

하 너무 돌고 돌았다. 슬프다.

  1. dev 2020.11.12 04:30

    덕분에 해결했어요 감사합니다!

  2. 쌀팔다개발자님최고짱 2021.11.10 17:02

    이 글이 저를 살렸습니다. 정말 감사합니다!!!!!!!!!
    𝓣𝓱𝓪𝓷𝓴 𝔂𝓸𝓾 𝓼𝓸 𝓶𝓾𝓬𝓱 ! ! !

  3. ㅈㄴㄱㄷ 2022.04.15 18:02

    django_migrations !~
    이게 핵심이었군요!! 유익한 글 감사합니다.!!

    폴더가 없어서 혹시나 하여 django 에서 접속 하는 db 의 테이블을 보니 존재를 합니다.
    해당 테이블에서 다시 적용을 하고 싶은 migrations 내역에 대한 row 를 삭제하지 정상적으로 되었습니다.

    참고 하시면 좋을 것 같아요 !!!

+ Recent posts