python

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

하이바네 2022. 10. 20. 09:45
반응형

일반적으로 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