DB 테이블 만들기

3.4.3. DB 테이블 만들기

우리는 ORM DB를 설계했습니다. 비록 간단하기는 하지만 우리가 코당힌 QuestionAnswer 클래스가 바로 ORM DB 모델입니다.

이제 클래스로 코딩된 모델을 실제 SQLite DB로 바꿔주는 작업을 해야 합니다. 이 작업을 migrate 한다고 표현 합니다. migrate이 이사간다는 뜻이니까 클래스 형태가 DB 구조로 이사간다고 생각하면 이해가 좀 더 쉬울 것 같습니다.

migrate을 수행하기 위해서는 hello_cju/__init__.py 내용 중에서 migrate 객체가 models.py 내용을 참조할 수 있도록 코드 한줄을 넣어줘야 합니다. 아래와 같은 코드를 추가합니다.

def create_app():
    
    # ...이전 코드 생략
    
    # ORM 관련사항 코딩
    db.init_app(app)
    migrate.init_app(app, db)

    # 추가할 코드
    from . import models

    # 이후 코드 생략...

그림 Fig. 3.10 으로 보면 다음과 같은 위치 입니다.

flask_tutorial

Fig. 3.10 __init__.pymodels 임포트

이제 진짜로 migrate을 통해 DB 테이블을 생성할 순서입니다. flask db migrate 명령어를 실행하면 다음과 같은 메시지가 출력되면서 migrate이 진행됩니다.

(가상환경이름) C:\여러분의 컴퓨터 경로>flask db migrate
INFO  [alembic.runtime.migration] Context impl SQLiteImpl.
INFO  [alembic.runtime.migration] Will assume non-transactional DDL.
INFO  [alembic.autogenerate.compare] Detected added table 'question'
INFO  [alembic.autogenerate.compare] Detected added table 'answer'
Generating (가상환경이름) C:\여러분의 컴퓨터 경로\migrations\versions\3277f1bc750b_.py ...  done

위 실행 결과에서 마지막 줄을 보면 작업 프로젝트 디렉토리에 \migrations\versions\ 아래에 3277f1bc750b_.py 파일을 생성했다는 메시지를 볼 수 있습니다.

실제로 확인해 보면 그림 Fig. 3.11 같이 3277f1bc750b_.py 파일이 생성된 것을 확인할 수 있습니다.

여기서 3277f1bc750b_.py와 같이 생성된 파일을 리비전(revision) 파일이라고 부릅니다. DB의 변경사항들을 처리하는 파일입니다. 리비전 파일 이름은 랜덤하게 생성되기 때문에 여러분과 제 파일명은 다를 것입니다. 대부분 숫자/문자 조합 + _.py와 같은 형태의 이름을 갖게 됩니다.

flask_tutorial

Fig. 3.11 ORM model을 migration 수행한 결과

VS code에서 3277f1bc750b_.py 파일을 열어보면 Flask-Migrate 프로그램이 우리가 만든 ORM 모델 (models.py)를 참고하여 자동으로 DB를 생성한 결과를 확인할 수 있습니다.

그림 Fig. 3.11에서 작업 프로젝트의 루트 디렉토리에 프로젝트 이름과 동일한 hello_cju.db 파일이 생성된 것을 볼 수 있습니다. hello_cju.db 파일이 바로 SQLite DB 파일입니다.

현재 상태의 DB 변경사항을 최종적으로 실제 DB에 적용하기 위해서는 flask db upgrade 명령을 실행시킨다. 아래와 같은 메시지가 출려되면서 DB를 최종 생성한다.

(가상환경이름) C:\여러분의 컴퓨터 경로> flask db upgrade
INFO  [alembic.runtime.migration] Context impl SQLiteImpl.
INFO  [alembic.runtime.migration] Will assume non-transactional DDL.
INFO  [alembic.runtime.migration] Running upgrade  -> 3277f1bc750b, empty message

여러분! 정말 수고하셨습니다. 여기까지 왔다면 Flask 웹 시스템 구축을 위한 큰 산을 넘어선 것입니다.

앞으로 데이터베이스가 실제로 만들어 졌는지 시각화 도구를 이용해 확인하고, 실제로 만들어진 DB에 데이터를 적용해보면 됩니다.

준비 되셨나요?

Next 아이콘을 눌러 이동해 주세요.