[Django] Table Already Exists 오류 해결하기

정환우·2021년 10월 31일
2

Django

목록 보기
5/6

장고에서 migration을 수행하다, 오류가 났다.

operationalerror : the talbe already exists

어쩌고 저쩌고.. 아무튼 이걸 해결하느라 애를 많이 먹었는데, 원인부터 생각해보자.

원인

원인은 간단한게, 이미 DataBased에 Table이 존재하여 새 Table을 생성할 수 없다는 것이다.
즉, python manage.py migrate 를 수행할 때, 이미 동일한 테이블이 존재하여 수정이 안된다는 뜻. 그러니까, Table을 지워주거나, migration수정을 하거나 해야한다.

해결 방법

원래는 테이블을 지우면, Data가 다 날라가기 때문에 굉장히 위험한 방법이지만, 나는 아직 초기 단계이고, 스터디용으로 사용하는 작은 과제이기 때문에 Migration과 DataBase를 함부로 건드려도 상관이 없는 상태였다.

고로, 디비는 초반에 아주 잘 설계를 해야 뒤에서 문제가 안발생한다. 뒤에 문제가 발생했을 때 이미 설계했던 디비 테이블을 고치는게 굉장히 번거럽고 어렵고 귀찮은 작업이라는 것을 이번 작업을 통해 알게 되었다.

Migration 해제하기

먼저 Migration이 얼마만큼 적용되어 있는지 확인을 해준다.

python manage.py showmigrations

이 명령어를 사용하면, 리스트로 migrate되어있는 파일들을 보여준다.

그리고 migration을 해제하기 위해

python manage.py migrate --fake [프로젝트_앱] zero

이렇게 명령어를 입력해주면, migration되어 있는 파일들이 해제가 된다. 그리고 migration 파일들을 삭제해주고, 다시 makemigrationmigrate 를 적용하면, 수정된 모델이 다 적용된다.

그런데 여기서, 나는 table exists 오류가 계속 발생했다.
이유를 찾아보니 나는 mariaDB를 사용하고 있었는데, python shell이 아니라 mysql에 직접 접속하여 database를 수정하면 동기화가 잘 안되어서 오류가 발생한다는 것 같았다.

고로, mariaDB에 직접 접속하여 database를 그냥 없애고 다시 만들었다. table을 하나하나 다 없애는 건 말이 안되기 때문에..

고로, Django를 사용할 때에는 mariaDB에 직접 접속하는 일은 없도록 하자.

이 간단한 오류를 해결하는데 3시간 정도 걸렸다. migrate에 대한 이해도가 조금 올라간 듯 하다.

profile
Hongik CE

0개의 댓글