Alembic 도입 계기
개발하고 있는 토이 프로젝트에 (정말정말 귀찮지만-) DB를 도입했다.
최대한 기술스택을 간단하게 가져가고싶었지만 더 풍부한 기능지원을 위해 굴복했다.
Python ORM 라이브러리 SQLAlchemy를 도입했는데, 계속 테이블을 수정하면서 수동 마이그레이션에 한계가 있다고 느껴서 찾아보니 Alembic이라는 SQLAlchemy 사용자용 DB 마이그레이션 툴이 있더라. 회사에서 백엔드 코드를 눈팅하면서 본 마이그레이션 파일들이 이녀석이 만든것이었다.
사용하기도 간편해서 다음번에 또 쓸 것 같아 간단히 사용법을 기록하겠다.
시작하기
초기화
Alembic을 사용하기에 앞서, 아래 명령어로 초기화하면 설정 파일인 alembic.ini
파일과 Alembic 프로젝트가 만들어진다.
alembic init
DB 연결 및 추가 설정
alembic.ini
에서 설정할 것이 있다면 해도되고, env.py
에서도 똑같이 설정할 수 있다. sqlalchemy.url
에 DB URL을 연결시켜주어야하는데, 나는 개발 환경과 프로덕션 환경을 분리하기 위해 환경변수로 따로 빼두어 설정했으므로 고정된 문자열로 URL을 줄 수 없었다. 따라서 env.py
에서 설정한다.
from db.model import *
from dotenv import load_dotenv
load_dotenv()
# this is the Alembic Config object, which provides
# access to the values within the .ini file in use.
config = context.config
config.set_main_option("sqlalchemy.url", "mysql+pymysql://{user}:{password}@{host}:{port}/{database}".format(
user=os.environ.get("MYSQL_USER"),
password=os.environ.get("MYSQL_PASSWORD"),
host=os.environ.get("MYSQL_ALEMBIC_HOST"),
port=os.environ.get("MYSQL_ALEMBIC_PORT"),
database=os.environ.get("MYSQL_DATABASE")
))
DB 모델 파일을을 모두 import 해주어야하며, 환경변수 값을 로드해서 sqlalchemy.url
을 설정해주었다. 설정이 완료되면 버전 관리를 시작하면된다.
새로운 리비전이 생성될때마다 versions
폴더에 마이그레이션 파일이 생긴다.
새로운 리비전 생성방법
alembic revision --autogenerate -m "<message>"
업그레이드 / 다운그레이드 방법
alembic upgrade head #최신 버전으로 업그레이드
alembic upgrade 1 #1개 버전만큼 업그레이드
alembic upgrade <revsion_hash> #특정 리비전으로 업그레이드
alembic downgrade <revsion_hash> #특정 리비전으로 다운그레이드
alembic downgrade -1 #1개 버전만큼 다운그레이드
'프로그래밍 > Python' 카테고리의 다른 글
[Python] SlackBot 쉽게 만들기 (0) | 2023.12.10 |
---|---|
[Python] zstandard로 dictionary list 압축하기 (0) | 2022.06.26 |
CLI로 Python 실행시 No module named 오류 해결방법 (0) | 2022.06.06 |
[Windows] mysqlclient 설치하기 (pip install mysqlclient) (0) | 2022.05.28 |
[Windows] Python virtual envorinment 활성화 하기 (0) | 2022.05.28 |