python에서 사용하는 DB 버전 관리 툴인 alembic을 flask에서 사용하기 유용한 버전으로 custom한 것이다.
flask-migration은 alembic과 동일한 기능을 제공하지만 훨씬 간단한 방식으로 flask에서 DB 버전 관리를 할 수 있도록 해준다.
1. 설치
사용하기 위해서 dependecy를 추가해준다.
$> poetry add flask-migrate
dependency를 추가해주면 flask에 db라는 명령어가 새로 추가된 것을 확인할 수 있다.
flask db
명령어에 대한 자세한 설명은 flask db --help
를 통해 확인할 수 있다.
2. 초기화
from flask-migrate import Migrate
migrate = Migrate()
migrate.init_app(app, db)
python 코드에 위와 같이 flask-migrate를 연결해준 후,
$> flask db init
명령어를 통해 초기화를 수행하면 'migrations'라는 이름의 폴더가 생성되며 alembic을 수행했을 때와 동일한 파일들로 구성되어있다.
3. 사용
alembic에서 사용하던 것과 동일하게 'env.py' 파일 수정을 통해서 데이터베이스 접속 정보를 관리할 수 있지만 따로 변경하지 않고 진행하였다.
$> flask db revision
$> flask db migrate
위와 같은 두가지 명령어를 통해 revision 파일을 생성할 수 있는데,
revision
: revision 파일 만을 생성 = 변경 사항을 직접 작성migrate
: alembic revision --autogenerate
와 동일한 기능 = 변경사항을 감지해 revision 생성같은 차이가 존재한다.
둘 중 하나의 명령어로 revision을 생성하면 migrations > versions 하에 revision 파일이 생성된다.
4. 변경사항 적용
데이터베이스의 변화를 revision을 통해 생성하였다면, flask-migrate에서도 alembic에서와 마찬가지로 데이터베이스의 버전을 변경해주어야만 반영이 된다.
upgrade/downgrade 명령을 실행하지 않는다면 DB의 모양이 변경되지는 않는다.
$> flask db upgrade # 가장 최근 버전으로 DB upgrade
$> flask db downgrade # 이전 버전으로 DB downgrade
적용을 하게 되면 DB에 변경 사항이 반영된 것을 확인할 수 있다.
생성하고자 하던 table 외에 'alembic_version' 이라는 테이블도 생성이 되는데, 이 테이블에는 현재 DB의 version이 어떤 것이지에 대한 정보가 담겨있다.