0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

Flask-Migration時にアプリケーションファイルとモデリングファイルを分けたい

Posted at

Migrationを実施する際にモデルファイルを分けたい。

ディレクトリ階層

.
├── app.py
├── models.py

この場合、SQLAlchemyインスタンス化をmodel.pyで記載し、そのインスタンスを各モデルClassに継承する。

例えば下記の通り。

# model.py

from flask_sqlalchemy import SQLAlchemy

# ここに記載
db = SQLAlchemy()


class Todo(db.Model):
    __tablename__: str = "todo"

    id = db.Column(db.Integer, primary_key=True)
    title = db.Column(db.String(255), nullable=False)
    description = db.Column(db.String(1000))
    completed = db.Column(db.Boolean, default=False)

    def __init__(self, title, description, completed) -> None:
        self.title = title
        self.description = description
        self.completed = completed

    def __str__(self) -> str:
        return f"title={self.title},description={self.description},completed={self.completed}"

こうすることでトップ層でアプリケーションを実行するファイルと分割し、DBモデリングを別のファイルで実施することができ、管理が簡単となる。

あとはapp.pyでdbインスタンスを呼び出し、初期化・マイグレーションをしてあげればDatabaseを作成できる。

# app.py

from flask import Flask
from flask_migrate import Migrate
from models import db

app = Flask(__name__)

# database定義に必要な設定
app.config["SQLALCHEMY_DATABASE_URI"] = "sqlite:///app.sqlite3"
app.config["SQLALCHEMY_TRACK_MODIFICATIONS"] = False

# 初期化、マイグレーション
db.init_app(app)
migrate = Migrate(app, db)


if __name__ == "__main__":
    app.run(debug=True, port=8080)

あとは下記コマンドを打ち込むだけ。(.flaskenvにapp.pyの登録必須。)

flask db init

flask db migrate

flask db upgrade
0
0
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
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?