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 라이브러리 사용하기
- ORM 라이브러리 설치하기
pip install Flask-Migrate
- 설정 파일 추가하기
# 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 : 모델의 변경 내용을 실제 데이터베이스에 적용할 때 사용