Tiny Star

❌Exception&Error/🔵Python

[❌삽질과 해결 그 사이] alembic upgrade head 이후 테이블 생성이 안될 때

청크 2024. 5. 9. 10:52

이번에 새로 신규 기능을 진행하면서 테이블 설계를 마쳤다.

 

이제 이 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