LoginSignup
1
1

More than 3 years have passed since last update.

SQLAlchemyを使ってFlaskアプリのDB設定をする

Posted at

この記事では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ファイルを整理することで、開発規模が大きくなっても完結でまとまりがあるコードになります。参考になれば幸いです!

1
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
1