728x90
Flask-Migrate는 db와 sqlalchemy models.py의 차이를 추적하여 업그레이드/다운그레이드 스크립트 자동으로 생성해줌
Flask-Migrate 소개 및 기초 사용법
Flask-Migrate란? Flask-Migrate는 SQLAlchemy를 사용하는 Flask 애플리케이션에서 데이터베이스 스키마를 효과적으로 관리하기 위한 extension Flask-Migrate는 Alembic이라는 데이터베이스 마이그레이션 툴을 내부
bigseok.tistory.com
만약에 서비스에 필요한 DB table 초기 데이터도 함께 관리하고 싶다면 마이그레이션 스크립트에 수동으로 추가해주어야 함
1. DB 초기화
flask db init
위의 명령어를 수행한 위치에 migrations 폴더 자동으로 생성됨
2. 마이그레이션 스크립트 생성
flask db migrate -m "Initial migration."
migrations/versions 폴더 하위에 {revision}_{message}.py 스크립트가 자동으로 생성됨
3. 마이그레이션 스크립트에 수동으로 초기데이터 변경내용 추가
마이그레이션 스크립트 업그레이드 함수에 초기데이터삽입 코드 추가예시
# /migrations/versions/{revision}_{message}.py
def upgrade():
...생략...
# ### end Alembic commands ###
add_initial_data()
def add_initial_data():
op.bulk_insert(
sa.table('tb_users',
sa.column('name'),
sa.column('user_id'),
sa.column('password'),
sa.column('admin_yn'),
sa.column('email')
),
[
{
'name': '관리자',
'user_id': 'admin',
'password': 'admin123!@#',
'admin_yn': 'Y',
'email': 'admin@test.com'
}
]
)
- 💡 Alembic에서 op 객체(operations의 약자)는 다양한 데이터베이스 스키마 작업을 수행할 수 있는 함수 집합을 제공 https://alembic.sqlalchemy.org/en/latest/ops.html
- alembic op모듈 주요 기능
- 테이블 작업
- op.create_table(): 새로운 테이블을 생성
- op.drop_table(): 기존 테이블을 삭제
- op.add_column(): 기존 테이블에 새로운 열을 추가
- op.drop_column(): 기존 테이블에서 열을 삭제
- op.alter_column(): 열의 속성을 변경
- 인덱스 작업
- op.create_index(): 새로운 인덱스를 생성
- op.drop_index(): 기존 인덱스를 삭제
- 데이터 작업
- op.execute(): SQL 문을 직접 실행
- 제약 조건 작업
- op.create_foreign_key(): 새로운 외래 키 제약 조건을 생성
- op.create_primary_key(): 새로운 기본 키 제약 조건을 생성
- op.create_check_constraint(): 새로운 체크 제약 조건을 생성
- 기타 작업
- op.rename_table(): 기존 테이블의 이름을 변경
- op.rename_column(): 기존 열의 이름을 변경
- op.create_sequence(): 새로운 데이터베이스 시퀀스를 생성
- 대량 데이터 작업
- op.bulk_insert(): 테이블에 대량 삽입을 수행
- op.bulk_update(): 테이블에서 대량 업데이트를 수행
- 테이블 작업
728x90
'Python > Web' 카테고리의 다른 글
FastAPI 개발자가 직접 개발한 FastAPI backend 데이터모델 models.py (0) | 2024.03.16 |
---|---|
FastAPI 개발자가 직접 개발한 FastAPI backend alembic (1) | 2024.03.12 |
Flask-Migrate 소개 및 기초 사용법 (0) | 2024.03.05 |
FastAPI 개발자가 직접 개발한 FastAPI backend pyproject.toml (0) | 2024.03.03 |
FastAPI 개발자가 직접 개발한 FastAPI backend 프로젝트 구조 (0) | 2024.03.03 |