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모듈 주요 기능
    1. 테이블 작업
      • op.create_table(): 새로운 테이블을 생성
      • op.drop_table(): 기존 테이블을 삭제
      • op.add_column(): 기존 테이블에 새로운 열을 추가
      • op.drop_column(): 기존 테이블에서 열을 삭제
      • op.alter_column(): 열의 속성을 변경
    2. 인덱스 작업
      • op.create_index(): 새로운 인덱스를 생성
      • op.drop_index(): 기존 인덱스를 삭제
    3. 데이터 작업
      • op.execute(): SQL 문을 직접 실행
    4. 제약 조건 작업
      • op.create_foreign_key(): 새로운 외래 키 제약 조건을 생성
      • op.create_primary_key(): 새로운 기본 키 제약 조건을 생성
      • op.create_check_constraint(): 새로운 체크 제약 조건을 생성
    5. 기타 작업
      • op.rename_table(): 기존 테이블의 이름을 변경
      • op.rename_column(): 기존 열의 이름을 변경
      • op.create_sequence(): 새로운 데이터베이스 시퀀스를 생성
    6. 대량 데이터 작업
      • op.bulk_insert(): 테이블에 대량 삽입을 수행
      • op.bulk_update(): 테이블에서 대량 업데이트를 수행
728x90

+ Recent posts