目次
第2週のプラン:データベース連携の基礎(データの記憶)
1. データベースの選定とセットアップ
今回は、学習用として非常に手軽で、特別なサーバーを立てる必要がないSQLiteというデータベースを使用します。
そして、Pythonからデータベースを操作するために、SQLAlchemyというライブラリと、それをFlaskで使いやすくするためのFlask-SQLAlchemyという拡張機能を使用します。
データベース | SQLite |
ライブラリ | SQLAlchemy |
拡張機能 | Flask-SQLAlchemy |
1-1. Flask-SQLAlchemy のインストール
以下のコマンドでFlask-SQLAlchemyをインストール
pip install Flask-SQLAlchemy
1-2. app.py
の設定変更
Flaskアプリケーション(app.py
)に、データベースを使用するための設定を追加します。
from flask import Flask, render_template
from flask_sqlalchemy import SQLAlchemy # SQLAlchemyをインポート
app = Flask(__name__)
# データベース設定の追加
# SQLiteデータベースファイルのパスを指定
# 'sqlite:///site.db' は、プロジェクトフォルダ内に 'site.db' という名前のデータベースファイルを作成することを意味します。
app.config['SQLALCHEMY_DATABASE_URI'] = 'sqlite:///site.db'
# 追跡機能を無効にする(リソース節約のため)
app.config['SQLALCHEMY_TRACK_MODIFICATIONS'] = False
# SQLAlchemyオブジェクトの初期化
db = SQLAlchemy(app)
@app.route("/")
def index():
return render_template("index.html")
# ここから追加
@app.route("/about") # 新しいルーティングを追加
def about():
#return "<h1>このアプリについて</h1><p>これは私の初めてのFlaskアプリです。</p>"
return render_template("about.html") #HTMLテンプレートをレンダリングして返す
@app.route("/greet/<string:name>") # <name> 部分がURLパラメータ
def greet(name): # 関数にパラメータを受け取る引数を追加
# 変更前: return f"<h1>Hello, {name}!</h1><p>Welcome to your personalized page!</p>"
# 変更後: render_template を使って greet.html にデータを渡す
return render_template("greet.html", username=name) # usernameという名前で name の値を渡す
@app.route("/user/<int:user_id>")
def show_user(user_id):
return f"ユーザーIDは {user_id} です。"
@app.route("/calculate/<num1>/<num2>")
def caluculate(num1,num2):
try:
# URLパラメータは文字列として受け取られるので、int()で数値に変換
number1 = int(num1)
number2 = int(num2)
total = number1 + number2
# calculate.html に計算結果を渡してレンダリング
return render_template("calculate.html",num1 = number1,num2 = number2,total = total)
except ValueError:
# エラーページをレンダリングすることも可能ですが、今回は直接メッセージを返します
return "エラー: 無効な数値が指定されました。", 400
@app.route("/product/<id>/<name>")
def product(id,name):
return render_template("product.html", product_id = id, product_name = name)
if __name__ == '__main__':
app.run(debug=True)
2. データベースモデルの定義
次に、家計簿の「記録」を保存するためのデータ構造(テーブルの設計図)をPythonコードで定義します。これをモデルと呼びます。app.py
に、db = SQLAlchemy(app)
の直後あたりに、以下のクラス定義を追加
# ... 省略(既存のコード) ...
db = SQLAlchemy(app)
# ここから追加
class Transaction(db.Model):
id = db.Column(db.Integer, primary_key=True)
date = db.Column(db.String(20), nullable=False) # 日付 (例: '2025-07-01')
item = db.Column(db.String(100), nullable=False) # 項目名 (例: '食費', '交通費')
amount = db.Column(db.Integer, nullable=False) # 金額 (整数)
def __repr__(self):
return f"Transaction('{self.date}', '{self.item}', {self.amount})"
# ここまで追加
@app.route("/")
def index():
return render_template("index.html")
# ... 省略(残りのコード) ...
3. データベースの作成と初期化
モデルを定義しただけでは、まだ実際のデータベースファイルは作成されていません。次に、定義したモデルに基づいてデータベースファイルとテーブルを作成します。
このステップは、Flaskアプリケーションを起動する前に行う必要があります。
Pythonのインタプリタ(対話モード)を起動して以下を実行。
from app import app, db
app.app_context().push()
db.create_all()
exit()
site.db
がmy_money_app/instance/site.db
のパスに作成されました。

これでデータを保存するための箱と設計図が用意されました。
次は実際にデータを追加します。Pythonインタプリタが起動して
from app import app, db, Transaction
app.app_context().push()
# 新しい取引データを作成
transaction1 = Transaction(date='2025-07-01', item='食費', amount=1500)
transaction2 = Transaction(date='2025-07-02', item='交通費', amount=300)
transaction3 = Transaction(date='2025-07-02', item='給料', amount=100000)
# データベースに追加
db.session.add(transaction1)
db.session.add(transaction2)
db.session.add(transaction3)
# 変更をコミット(保存)
db.session.commit()
print("データが追加されました。")
exit()
データ確認

ちゃんとデータが挿入されていました。
おまけ
毎度恒例、NotebookLMに読み込ませてみました。以下、音声データです。
音声データ書き出しの他にも、マインドマップの作成も可能です。
