글 작성자: 개발섭

Web framework에서 DB는 아주 큰 중요한 요소이다. 최근 Web Framework의 추세상 ORM을 적용하는 많은 프레임워크가 많은데요. 그러다보니까 내가 프로그래밍을 하고 SQL문을 장고에서 자동으로 ORM을 통해 생성되게 된다.

물론, 내가 생각한대로 table이 잘 생성되면 좋겠지만.. 예상치 못한 상황으로 table을 바꿔야하거나, 혹은 table 자체를 다시 설계해야하는 상황이 생겼다.

 

출처: (http://www.analyticaweb.com/desarrollo-web/aprende-ya-que-es-un-orm)

 

그리고 장고에서 DB table이 꼬이면, 어디서부터 table이 생긴건지, 어디서부터 없는건지 파악할 수 없기때문에 진짜 말그대로 sqlite3에 직접들어가서 확인해보는 것과 같은 방식으로 찾는 것도 있다.

내가 장고에 대한 이해도가 그리 높지 않아서, 특히 modeling을 바꾸고 난 다음 python manage.py makemigrations 과 python manage.py migrate 후에 modeling이 재대로 적용되지 않는 이상한 버그가 있는 듯하다.

특히, migration을 날리고 난다음에 table은 있는 경우 오히려 테이블은 이전 모델이라 재대로 key가 적용이 안되는 이상한... 별의 별 상황을 다 겪었다.

내가 겪었던 별의별 이상한 문제들...;;;

  • modeling이 변경되면 migration이 잘 변경됨
  • 하지만 가끔 migration을 그냥 물리적으로 파일을 없에버리면, makemigrations 혹은 migrate을 통해서 직접 테이블이 변경되지 않는 이상한 버그가 있다.
  • 또 거기에 직접 SQLite3에 들어가서 테이블을 삭제하고 다시 migrate작업을 해도 다시 테이블이 생성되지 않아서 난감.

이런 버그를 해결하는 방법은 다음과 같다.

  1. 해당 앱에 있는 migrations 폴더안의 init.py 파일을 제외하고 모두 삭제하기!

  2. database에 직접 접속하여 테이블 중 django_migrations 라는 테이블에서 해당 앱에 대한 raw를 삭제.

DELETE FROM django_migrations WHERE app = '앱 이름'

 

  1. python3 manage.py makemigrations // python3 manage.py migrate 수행 하면 해결

참고: https://forybm.tistory.com/2

 

[Django]장고 테이블 지우고 난 후 다시 마이그레이션 하는 방법!

장고 프레임워크에서 어떠한 모델 테이블을 디비에서 직접 drop을 시킨 경험이 있다. 이 후에 다시 그 모델을 python3 manage.py makemigrations //  python3 manage.py migrate 명령어를 수행해 보았으나 디비에..

forybm.tistory.com