この記事ではSqlalchemyを使ってFlaskアプリのDB設定を行っていきます。
引き続きApplication Factory法に沿ってアプリを整理していくので、わからない方は前回の記事をご参照ください。
それでは、まず、pipを使ってsqlalchemyをインストールします。
今回はFlask-sqlalchemyではなくて生のsqlalchemyを使います。
設定に少し手間がかかりますが、開発スペースが広がります。
次に、applicationディレクトリ内にmodelディレクトリを作ります。
その中にbase.pyとmodel.pyを作り、以下のコードを書いていきます。
application/model/base.py
from sqlalchemy.ext.declarative import declarative_base
Base = declarative_base()
application/model/model.py
from sqlalchemy import create_engine
from sqlalchemy.orm import scoped_session, sessionmaker
from application.model.base import Base
from config import configObject
engine = create_engine(configObject.DATABASE_URI, convert_unicode=True, echo=True)
db_session = scoped_session(sessionmaker(autocomit=False, autoflask=False, bind=engine))
Base.query = db_session.query_property()
def db_init():
Base.metadata.create_all(bind=engine)
テーブルを作りたいときは、modelディレクトリ内に別ファイルを作りクラスを書いて、model.pyにインポートします。db_init関数をアプリ立ち上げ時に実行してあげれば、DB設定の完了です。
application/__init__.py
from flask import Flask, render_template
from flask_cors import CORS
from config import configObject
from application.model.model import init_db
def create_app():
# instantiate the app
app = Flask(__name__, template_folder="templates", static_folder="static")
app.config.from_object(configObject)
# enable CORS
CORS(app, resources={r'/*': {'origins': '*'}})
@app.route('/')
def hello_world():
return "Hello world!"
# instantiate db connection
init_db()
return app
DB設定は以上になります。
この方法でDBファイルを整理することで、開発規模が大きくなっても完結でまとまりがあるコードになります。参考になれば幸いです!