이번에 새로 신규 기능을 진행하면서 테이블 설계를 마쳤다.
이제 이 models.py 마이그레이션을 통해 DB에 등록을 할 차례.
프레임워크로는 Django를 사용하지만 ORM은 Django의 내장ORM이 아닌
SQLAlchemy ORM을 사용하고 있어서 모델을 Python 클래스로 정의하고,
이를 Alembic을 사용하여 마이그레이션을 관리하고 있었다.
migration 폴더 내 env.py안에 새로 등록 할 models를 import하고
터미널에 alembic upgrade head 명령어 입력하면 마이그레이션이 진행이 되어야하는데..
??? 마이그레이션 진행이 안되고 그러니 당연히 DB에 테이블이 생기지 않는다.
그 이유가 바로 Django 내장 ORM이 SQLAlchemy 마이그레이션을 방해하고 있기 때문!
장고에는 manager라는 기본 테이블이 존재하지만 SQLAlchemy 에는 해당 테이블이 없다.
그렇기 때문에 SQLAlchemy에서 마이그레이션을 시도하면 manager 테이블이 없다는 오류로그를 확인 할 수 있는데,
이건 아직 별다른 해결법이 없고... DB 자체를 통째로 DROP 시키고 DB를 다시 연결하면서
순차적으로 SQLAlchemy 먼저 마이그레이션을 진행해준 뒤 장고 마이그레이션을 진행해주면 문제없이 테이블 생성이 완료된다.
1. migration 폴더 안 env.py파일에 마이그레이션 할 models.py를 import 시켜준다.
2. 터미널에 alembic revision --autogenerate 명령을 수행해서 리비전 파일을 생성한다.
3. alembic upgrade head 명령으로 리비전 파일을 실행한다.
4. 장고 마이그레이션을 추가로 진행해준다.
python manage.py makemigrations
python manage.py migrate