728x90
Alembic
정의
Spring에서 Flyway가 있다면 Python(FastAPI)에서는 Alembic이 DB 마이그레이션 버전 관리를 제공한다.
SQLAlchemy를 사용할 때 경량화된 DB 마이그레이션 툴이다.
역할
- Scripts로 migration 환경을 생성
- Migration 테이블을 통해 어디까지 마이그레이션이 되었는지 확인
- 데이터베이스를 실시간으로 수정 및 변경 사항을 추적할 수 있다.
- 중복 마이그레이션 및 버전 관리(다운그레이드 및 롤백도 가능)
Alembic 명령어 및 파일 소개
Alembic 명령어 | ||
No. | Command | Details |
1 | alembic init <폴더명> | 작성한 폴더명으로 alembic 정보(마이그레이션 환경)가 담길 폴더가 생성 |
2 | alembic revision -m <메세지> | 환경의 새 버전 생성(=버전 관리) |
3 | alembic upgrade <revison #> alembic downgrade <revison #> |
데이터베이스 버전 변경 이 명령을 통해 DB의 버전을 반영시킨다. |
alembic upgrade head alembic downgrade base alembic upgrade / downgrade alembic upgrade / downgrade revisionID |
가장 상단의 버전으로 DB가 upgrade 가장 하단의 버전으로 DB가 downgrade N의 수 만큼 upgrade와 downgrade ex) downgrade -1 => 바로 이전 버전으로 revisionID로 upgrade와 downgrade |
Alembic 구성 | ||
No. | File name | information |
1 | Alembic Directory | Alembic의 모든 환경 속성을 내포 프로젝트의 모든 버전을 내포 업그레이드를 위해 마이그레이션을 호출하는 위치 다운그레이드를 위해 마이그레이션을 호출하는 위치 |
2 | Alembic.ini file | 데이터베이스의 접속 정보 관리 Alembic이 호출 될 때 정보를 찾는 파일 |
3 | Env.py | 파일 수정을 통해서 데이터베이스의 접속 정보를 관리 Alembic이 호출될 때마다 실행되는 Python의 Scripts가 기재 SqlAIchemy의 Engine의 생성과 migration이 실행되도록 기재 |
4 | READEM.md | 어떤 환경에서 migration 환경을 작성했는지 기재 |
5 | Script.py.mako | 새로운 migration의 스크립트를 생성하기 위해 사용되는 Mako(python 템플릿 엔진) 템플릿 파일. 여기에 기재되어 있는 무엇이든 version/내의 새로운 파일을 생성하는 데에 사용 |
실습해 보기
1) pip install alembic(alembic 설치 시 sqlalchemy도 동시에 설치된다고 한다.)
2) alembic init alembic(alembic에 필요한 모든 디렉터리를 생성)
3) Upgarde Alebic
- alembic.ini에서 sqlalchemy.url에 PostgreSQL url을 삽입
- env.py파일 수정
import sys
sys.path.append("...")
import models
from logging.config import fileConfig
from logging.config import fileConfig
from sqlalchemy import engine_from_config
from sqlalchemy import pool
from alembic import context
# this is the Alembic Config object, which provides
# access to the values within the .ini file in use.
config = context.config
fileConfig(config.config_file_name) #구성파일이름
target_metadata = models.Base.metadata #models.py의 Base
# Interpret the config file for Python logging.
# This line sets up loggers basically.
#if config.config_file_name is not None:
# fileConfig(config.config_file_name)
# add your model's MetaData object here
# for 'autogenerate' support
# from myapp import mymodel
# target_metadata = mymodel.Base.metadata
# target_metadata = None
- 새 버전 생성
alembic revision -m "create phone number for user col"
- Alembic을 통해 phone number 열을 생성해 보기
# 앞서 생성했던 버전의 upgrade 함수를 수정
def upgrade():
op.add_column('users', sa.Column('phone_number', sa.String(), nullable=True))
- Alembic을 통해 phone number 열을 삭제해 보기(이전 버전으로 돌아감)
def downgrade():
op.drop_column('users', 'phone_number')
728x90
SMALL
'Develop > FastAPI' 카테고리의 다른 글
FastAPI 테이블 관계 형성하기- 72 (0) | 2023.01.24 |
---|---|
FastAPI Alembic new 테이블 및 외래키 생성(Upgrade / Downgrade) - 71 (0) | 2023.01.22 |
FastAPI Routing 실습 - 69 (0) | 2023.01.18 |
FastAPI Dependencies 라우팅 - 68 (0) | 2023.01.17 |
FastAPI External 라우팅 - 67 (0) | 2023.01.17 |