Flask 데이터 처리하기



ORM(Object relational mapping)을 이용하면 파이썬 문법만으로도 데이터베이스를 다룰 수 있다. 즉, ORM을 이용하면 개발자가 쿼리를 직접 작성하지 않아도 데이터베이스의 데이터를 처리할 수 있다.



ORM 알아보기


ex 1. subject table

id subject conetent
1 수학 미분
2 영어 동사


--쿼리를 이용한 새 데이터 삽입
insert into subject (subject, content) values ('수학', '미분');
insert into subject (subject, content) values ('영어', '동사');
# ORM을 이용한 새 데이터 삽입
subject1 = Subject(subject='수학', content='미분')
db.session.add(subject1)
subject2 = Subject(subject='영어', content='동사')
db.session.add(subject2)

ORM을 이용하면 데이터베이스 종류에 상관 없이 일관된 코드를 유지할 수 있어서 프로그램을 유지 보수하기가 편리하다. 또한 내부에서 안전한 SQL 쿼리를 자동으로 생성해 주므로 개발자가 달라도 통일된 쿼리를 작성할 수 있고 오류 발생률도 줄일 수 있다.



플라스크 ORM 라이브러리 사용하기


  1. ORM 라이브러리 설치하기
pip install Flask-Migrate


  1. 설정 파일 추가하기
# project > firstproject

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 : 데이터베이스 접속 주소
  • SQLALCHEMY_TRACK_MODIFICATIONS : SQLAlchemy 의 이벤트를 처리하는 옵션

SQLite : 파이썬 기본 패키지에 포함된 SQLite는 주로 소규모 프로젝트에서 사용하는 가벼운 파일을 기반으로 한 데이터베이스다. 보통은 SQLite로 개발을 빠르게 진행하고 이 후 실제 운영 시스템에 반영할때에는 좀 더 규모가 큰 데이터베이스를 사용한다.



ORM 적용하기


from flask import Flask
from flask_migrate import Migrate
from flask_sqlalchgemy 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)

    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 함수에서 수행한다.



4. 데이터베이스 초기화하기

flask db init

이 명령은 데이터베이스를 관리하는 초기 파일들을 migrations라는 디렉터리에 자동으로 생성해 준다. 이 때 생성되는 파일들은 Flask-Migrate 라이브러이에서 사용된다. flask db init 명령은 최초 한 번만 수행하면 된다.

flask db migrate : 모델을 새로 생성하거나 변경할 때 사용

flask db upgrade : 모델의 변경 내용을 실제 데이터베이스에 적용할 때 사용