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?

[備忘録]初期カテゴリをDBに登録する方法

Last updated at Posted at 2025-04-08

目的

この章では、カテゴリ(収入/支出)を管理するためのテーブルを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)で操作できるようにする実装に進みます。

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?