前回の記事でSQLAlchemyを使ってSQLiteのデータベースとWEBアプリケーションを連携させる初期化ファイルを作成しました
最終的には、ToDoリストのWEBアプリケーションを作ろうと思っていますので、そのためのデータベースのモデル定義をしていきます
・環境
Windows 11
Flask 3.1.0
Flask-SQLAlchemy 3.1.1
・ディレクトリ構成
前回まであったmain.pyというファイルのかわりに、models.pyとviews.pyというファイルを追加していきます
project/
├── flaskr/
│ ├── __init__.py # アプリケーションの初期化
│ ├── models.py # データベースのモデル定義
│ ├── views.py # ルートやビューのロジック
│ └── templates/
│ └── index.html # テンプレート
└── run.py # アプリケーションの起動スクリプト
・モデル定義ファイルの作成
データベースのモデル定義をするファイルを、models.pyとして作成します
from . import db
from datetime import datetime
class Todo(db.Model):
id = db.Column(db.Integer, primary_key=True) # インデックスとなるユニークな値
title = db.Column(db.String(100), nullable=False) # タスクのタイトル
description = db.Column(db.Text, nullable=True) # タスクの詳細
due_date = db.Column(db.DateTime, nullable=True) # タスクの期限
def __repr__(self):
return f'<Todo {self.title}, Due: {self.due_date}>'
・コードの解説
class Todo(db.Model):
TodoクラスはSQLAlchemyのモデルとして機能します
継承: db.Modelを継承しているため、このクラスはデータベース内でテーブルとして表現されます
テーブル名: デフォルトでテーブル名はクラス名の小文字(todo)になります。
id = db.Column(db.Integer, primary_key=True)
各レコードを一意に識別するためのプライマリキー(主キー)
db.Integer: 整数型で自動的に増加するユニークなIDを割り当てます
引数:primary_key=True: これを主キーとして指定し、この列は必ずユニークで、空欄は許されません
title = db.Column(db.String(100), nullable=False)
タスクのタイトルを格納します
db.String(100): 最大100文字の文字列型
引数:nullable=False: 空欄は許されません
description = db.Column(db.Text, nullable=True)
タスクの詳細説明を格納します
db.Text: 長文データを格納できる型(文字数制限なし)
引数:nullable=True: この列は空欄を許可します
due_date = db.Column(db.DateTime, nullable=True)
タスクの期限を記録します
db.DateTime: 日時型、Pythonのdatetimeオブジェクトと互換性があります
引数:nullable=True: この列は空欄を許可します(オプション項目)
例: 2025-01-20 14:00:00のような日時
def __repr__(self): return f'<Todo {self.title}, Due: {self.due_date}>’
このクラスのインスタンスを表す文字列を定義します。__repr__とは:デバッグやロギングの際に役立つ、オブジェクトの文字列表現を返します。この場合、タスクのタイトルと期限を表示します
次回はviews.pyのファイルを作成し、データベースへレコードを書き込めるようにしていきたいと思います
コメント