python flask 入門 No.3

Python

前回の記事で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のファイルを作成し、データベースへレコードを書き込めるようにしていきたいと思います

コメント