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