[Flask] 모델로 데이터 처리하기 - SQLAlchemy 설치

참조


소개

  • 지금 현재 예제로 만드는 파이보는 질문 답변 게시판입니다.
  • 질문이나 답변을 작성하면 데이터가 생성됩니다.
  • 그러므로 데이터를 저장하거나 조회하거나 수정하는 등의 기능을 구현해야 합니다.
  • 웹 서비스는 데이터를 처리할 때 대부분 데이터베이스를 사용합니다.
  • 하지만 데이터베이스를 사용하려면 SQL 쿼리 등 구조화된 질의를 작성하고 실행하는 등의 복작한 과정이 필요합니다.
  • 이때 ORM(Object Relational Mapping) 을 이용하면 파이썬 문법만으로도 데이터베이스를 다룰 수 있습니다.

ORM 라이브러리 설치하기

  • 파이썬 ORM 라이브러리 중 가장 많이 사용하는 SQLAlchmey 를 사용합니다.
  • Flask-Migrate 라이브러리를 설치하면 SQLAlchemy 도 함께 설치되므로 myproject 가상 환경에서 다음 명령을 수행하여 Flask-Migrate 라이브러리를 설치합니다.
(myproject) C:\venvs\myproject>pip install Flask-Migrate
Collecting Flask-Migrate
  Downloading Flask_Migrate-3.1.0-py3-none-any.whl (20 kB)
Requirement already satisfied: Flask>=0.9 in c:\venvs\myproject\lib\site-packages (from Flask-Migrate) (2.0.3)
Collecting Flask-SQLAlchemy>=1.0
  Downloading Flask_SQLAlchemy-2.5.1-py2.py3-none-any.whl (17 kB)
Collecting alembic>=0.7
  Downloading alembic-1.7.7-py3-none-any.whl (210 kB)
     ---------------------------------------- 210.7/210.7 KB 12.5 MB/s eta 0:00:00
...생략...
Successfully installed Flask-Migrate-3.1.0 Flask-SQLAlchemy-2.5.1 Mako-1.2.0 SQLAlchemy-1.4.32 alembic-1.7.7 greenlet-1.1.2

설정 파일 추가하기

  • 파이보에 ORM을 적용하려면 config.py 라는 설정 파일이 필요합니다.
  • 루트 디렉터리에 config.py 파일을 생성하고 아래 코드를 추가합니다.
import os

BASE_DIR = os.path.dirname(__file__)

SQLALCHEMY_DATABASE_URI = 'sqlite:///{}'.format(os.path.join(BASE_DIR, 'pybo.db'))
SQLALCHEMY_TRACK_MODIFICATIONS = False
  • SQLALCHEMY_DATABASE_URI 는 데이터베이스 접속 주소이고, SQLACHEMY_TRACK_MODIFICATIONS 는 SQLAlchemy의 이벤트를 처리하는 옵션입니다.
  • 이 옵션은 파이보에 필요하지 않으므로 False로 비활성화 합니다.

    파이썬 기본 패키지에 포함된 SQLLite는 주로 소규모 프로젝트에서 사용하는 가벼운 파일을 기반으로 한 데이터베이스 입니다.


ORM 적용하기

  • 다음으로 pybo/init.py 파일을 수정해 SQLAlchemy 를 적용합니다.
from flask import Flask
from flask_migrate import Migrate
from flask_sqlalchemy import SQLAlchemy

import config

db = SQLAlchemy()
migrate = Migrate()

def create_app():
    app = Flask(__name__)
    app.config.from_object(config)

    # ORM
    db.init_app(app)
    migrate.init_app(app,db)

    # Blueprint
    from .views import main_views
    app.register_blueprint(main_views.bp)

    return app
  • config.py 파일에 작성한 항목을 app.config 환경 변수로 부르기 위해 app.config.from_object(config) 코드를 추가했습니다.
  • 그리고 전역 변수로 db, migrate 객체를 만든 다음 create_app 함수 안에서 init_app 메서드를 이용해 초기화 합니다.
  • 플라스크에서는 이러한 패턴을 자주 사용하비낟.
  • db 객체를 create_app 함수 안에서 생성하면 블루프린트와 같은 다른 모듈에서 불러올 수 없기 때문에, db, migrate와 같은 객체를 create_app 함수 밖에서 생성하고, 실제 객체 초기화는 create_app 함수에서 init_app 함수를 통해 진행합니다.

데이터베이스 초기화 하기

  • ORM 설정은 준비가 되었으므로, flask db init 명령을 통해 데이터베이스를 초기화 합니다.
(myproject) C:\venvs\myproject>flask db init
Creating directory C:\venvs\myproject\migrations ...  done
Creating directory C:\venvs\myproject\migrations\versions ...  done
Generating C:\venvs\myproject\migrations\alembic.ini ...  done
Generating C:\venvs\myproject\migrations\env.py ...  done
Generating C:\venvs\myproject\migrations\README ...  done
Generating C:\venvs\myproject\migrations\script.py.mako ...  done
Please edit configuration/connection/logging settings in 'C:\\venvs\\myproject\\migrations\\alembic.ini' before proceeding.
  • flask db init 명령은 데이터베이스를 관리하는 초기 파일들을 migrations 라는 디렉터리에 자동으로 생성해 줍니다.
  • 이때 생성되는 파일들은 Flask-Migrate 라이브러리에서 사용됩니다.


데이터베이스 관리 명령어

명령어 설명
flask db migrate 모델을 새로 생성하거나 변경할 때 사용 (실행하면 작업파일이 생성)
flask db upgrade 모델의 변경 내용을 실제 데이터베이스에 적용할 떄 사용 (위에서 생성된 작업파일을 실행하여 데이터베이스를 변경)

728x90

이 글을 공유하기

댓글

Designed by JB FACTORY