본문 바로가기
python

[python-django] models.py에서 테이블을 변경하는 경우(미해결)

by 하이바네 2022. 10. 20.
반응형

일반적으로 django에서는 models.py에 정의를 하고 다음과 같이 명령어를 실행하면 db table들이 생성된다.

python manage.py makemigrations
python manage.py migrate

 

이번에 발생한 문제점은 board_vote라는 테이블에 contraints를 추가하면서 발생하였다. author와 question을 묶어서 유니크로 쓰고 싶었던 상황이라 다음과 같이 Meta를 추가 하였다.

class Meta:
    db_table = 'board_vote'
    constraints = [
        models.UniqueConstraint(fields=['author', 'question'], name='vote of constraint')
    ]

 

이렇게 추가를 하고 위에 작성했던 명령어를 실행하니 제대로 동작되지 않음...

 

그래서 다음과 같은 것들을 시도했었다.

 

1. migrations 폴더에 있는 *_initial.py파일들을 삭제 후 실행 -> 문제 발생

 

2. 실제 db에 접속해서 테이블을 삭제 후 makemigrations을 실행 -> 문제 발생

python manage.py dbshell

SELECT * FROM sqlite_master WHERE type='table';

DROP TABLE appname_modelname;

.exit

위의 명령을 순서대로 치고 select에서 appname_modelname을 알아내어서 drop 시키면된다.

 

3. 마지막으로 migrations 폴더에 있는 *_initial.py에 있는 파일들을 삭제, db도 삭제(db.sqlite3) 후 makemigrations을 실행 -> 동작은 하지만 기존 데이터 다 사라졌음....

 

일단 현재는 개발중인 것이라 크게 상관은 없지만, 정확하게 어떻게 대응을 해야할지 반드시 살펴봐야 한다..(나중에)

 

django를 공부할수록 자꾸 숙제가 쌓이는 느낌이다.

 

일단 keep going...계속 나아가보자.

728x90

댓글