目的
この章では、カテゴリ(収入/支出)を管理するためのテーブルをSQLALchemyで作成す。
最終的には以下のような構成を持つcategories
テーブルを作ります。
id | name | expence_type |
---|---|---|
1 | 食費 | expence |
2 | 給料 | income |
フォルダ構成
app/
├── models/
│ └── budget.py ← Categoryモデル定義
├── routes/
│ └── category.py ← APIルーティング
├──__init__.py ← Flaskアプリの初期化
├── db.py ← DB作成+初期データ投入スクリプト
├── init_db.py ← SQLAlchemyの初期化
static/
├── js/
│ └── CategoryManager.js ← カテゴリを操作するJS
templates/
└── index.html ← HTMLファイル(css)
1.Category
モデルの定義
Category
モデルを作成します。
作成したモデルをdb
インスタンスに渡します。
models/budget.py
を作り、以下のコードを記述。
app/models/budget.py
from app.db import db
class Category(db.Model):
__tablename__ = "categories"
id = db.Column(db.Integer, primary_key=True)
name = db.Column(db.String(100), nullable=False)
expense_type = db.Column(db.String(10), nullable=False) # 'expense' or 'income'
-
id
: 主キー -
name
: カテゴリ名 -
expense_type
:"expense"
または"income"
2.SQLALchemyの初期化
db
インスタンスを作成します。
app/db.py
from flask_sqlalchemy import SQLAlchemy
db = SQLAlchemy()
3.Flaskアプリの初期化
app/db_init.py
で必要なFlaskアプリを初期化
app/__init__.py
from flask import Flask
def create_app():
app = Flask(__name__)
app.config["SQLALCHEMY_DATABASE_URI"] = "sqlite:///Household_accounting_management.db"
app.config["SQLALCHEMY_TRACK_MODIFICATIONS"] = False
from app.db import db
db.init_app(app)
return app
4.DB初期化スクリプトを作る
appインスタンスを作成し、DBの初期化と初期カテゴリ登録を行う部分
app/db_init.py
from app import create_app
from app.db import db
from app.models.budget import Category
app = create_app()
with app.app_context():
db.create_all()
print("DB初期化が完了しました")
# 初期カテゴリ登録(任意)
initial_categories = [
Category(name="食費", expense_type="expense"),
Category(name="給料", expense_type="income"),
]
db.session.add_all(initial_categories)
db.session.commit()
print("初期カテゴリを追加しました")
5.初期化を実行する
ターミナルで以下のコマンドを実行。
bash
python app/init_db.py
実行後、以下のようなログが出れば成功。
bash
DB初期化が完了しました
初期カテゴリを追加しました
補足 ModuleNotFoundError: No module named 'app'
が出たら
これはPythonにapp
モジュールの場所が伝わっていないのが原因です。
下記コマンドでプロジェクトルートを明示的に指定しましょう
bash
set PYTHONPATH=.
この章のまとめ
- SQLAlchemyでカテゴリ用の
Category
モデルを定義した -
init_db.py
でテーブルを作成し、初期カテゴリも登録した - DBの初期化は
python init_db.py
一発で完了!
次章では、作成したカテゴリ情報をREST API(GET/POST/PUT/DELETE)で操作できるようにする実装に進みます。