-
Django 테이블 이름 변경 및 삭제 후 마이그레이션시 에러Django 2021. 12. 28. 13:08
'NodeNotFoundError', 'No migrations to apply', 'Table doesn't exist' 등의 에러를 한번의 작업으로 맞딱뜨리는 것은 그리 어려운 일이 아니었습니다...ㅎㅎ
그래서 이런 에러들이 왜 발생했고 어떤 이유로 해결된 것인지 차근차근 정리해보고자 합니다.
우선 'postings'라는 앱을 생성하고 models.py 작성을 끝내고 마이그레이션 한 후에 DB를 봤는데
'postings_posting'이라고 되어 있어서 지저분하고 중복된다는 느낌이 강하게 들어서 바꾸고 싶었습니다.물론 에러가 발생하면 어쩌지 라는 생각도 들었지만 에러가 발생하면 찾아서 해결하면 되겠지라고 생각해서
우선 DB에서 직접 테이블 이름을 바꿔봤습니다.
mysql> ALTER TABLE postings_pisting RENAME postings
그 후에 "django table name convention"에 대해 찾아보다가 convention을 따라서 단수로 하는 것이 좋겠다는 생각이 들어 단수로 변경했습니다. DB에서 볼 때는 문제가 없어 보였습니다. (단수든 복수든 어느 것을 써도 무방한듯 합니다.)
아래의 블로그 글이 "django table name convention"에 대해 잘 써주신것 같아서 공유합니다.
https://velog.io/@drypot/Table-Name
테이블 이름, 단수, 복수
2010-11-28 초안. 2013-07-15 MongoDB 관련 추가. 2019-01-29 Gist에 옮기며 윤문. 2019-02-05 워드프레스에 옮김. 2019-07-08 Velog에 옮김. 짧은 결론 테이블 이름을 단수로 하면 여러 가지 문제를 피할 수 있습
velog.io
DB에 접속하여 convention을 참고하여 테이블명을 수정 그 후 models 모듈에서 db_table 값도 단수로 변경한 후에 마이그레이션을 시도했습니다.
그런데...??
왜 "No migrations to apply." 뜨는걸까 싶었습니다.
No migrations to apply. 구글링 후에 프로젝트 내의 migrations에서 __init__.py들을 제외한 모든 마이그레이션 파일을 제거하라는 글들이 많아서 그렇게 하고 마이그레이션을 했지만 매번 다른 에러메세지들을 마주했습니다..
DB에 해당 테이블이 있음에도 마이그레이션을 시도하면 존재하지 않는다는 에러메세지가 떠서 진짬을 흘렸습니다..
NodeNotFoundError ProgrammingError 그러던 중에 아래의 방법으로 문제를 해결해서 이 방법을 공유합니다!
1. 프로젝트 내의 migrations 안에서 __init__.py들을 제외한 모든 마이그레이션 파일을 제거
2. database에 접속하여 django_migrations 테이블의 해당 앱에 대한 raw를 삭제
DELETE FROM django_migrations WHERE app='해당 앱 이름'
mysql DB 접속해서 'postings'와 'users'라는 앱 삭제 마이그레이션이 잘 마무리되었습니다! 2번 방법 후에 마이그레이션을 다시 하니 문제 없이 진행되었고 DB에서 조회했더니 문제없이 잘 생성되었습니다.
아마 __init__.py를 제외한 나머지 마이그레이션 파일들을 지워도 DB에는 해당 앱의 마이그레이션 데이터가 아직 남아있어서 이런 문제가 발생하는듯 싶습니다.
위의 방법이 부디 도움이 되기를 바랍니다!
아래의 사이트도 정리가 깔끔하게 되어 있어서 공유합니다.
https://sundries-in-myidea.tistory.com/84
Django 테이블 지우고 난 후 다시 마이그레이션 하는 방법!
Web framework에서 DB는 아주 큰 중요한 요소이다. 최근 Web Framework의 추세상 ORM을 적용하는 많은 프레임워크가 많은데요. 그러다보니까 내가 프로그래밍을 하고 SQL문을 장고에서 자동으로 ORM을 통해
sundries-in-myidea.tistory.com
'Django' 카테고리의 다른 글
ManyToManyField 사용법 및 장점 (0) 2022.01.09 TypeError : Field 'id' expected a number but got <User : User object (1)> (0) 2022.01.05 Login의 View 작성시 피해야 할 코드 작성법 (0) 2021.12.23 Email Validation (이메일 유효성 검사 - 정규표현식 활용) (0) 2021.12.19 Foreign Key - CASCADE (0) 2021.12.16