プログラミング

FlaskとSQLiteのリレーションシップ

FlaskとSQLiteを使用したOne-to-Manyリレーションシップの完全かつ包括的なガイドを以下に提供します。

1. 概要

FlaskはPythonの軽量なWebフレームワークであり、SQLiteは組み込み型のリレーショナルデータベースです。FlaskとSQLiteを使用して、アプリケーションで**One-to-Many(1対多)**のリレーションシップを実装する方法について解説します。

このガイドでは、以下の内容をカバーします:

  • One-to-Manyリレーションシップとは
  • FlaskでSQLiteを使用するための準備
  • データベースモデルの設計
  • One-to-Manyリレーションシップの実装
  • 実際のコード例

2. One-to-Manyリレーションシップとは

One-to-Manyリレーションシップは、データベース設計において、あるエンティティが複数の関連エンティティと関連する場合を指します。例えば、「親」と「子」の関係です。親(親テーブル)は多くの子(子テーブル)を持つことができますが、子は1つの親にしか関連しません。

具体的な例として、ブログのシステムを考えてみましょう。1つのユーザーは複数の記事(ポスト)を作成でき、各記事は1人のユーザーにのみ関連します。このような関係がOne-to-Manyです。

3. FlaskとSQLiteの設定

まずは、Flaskアプリケーションを作成し、SQLiteデータベースをセットアップします。

3.1 必要なパッケージのインストール

bash
pip install flask flask_sqlalchemy
  • Flask: Webアプリケーションのフレームワーク。
  • Flask-SQLAlchemy: FlaskとSQLAlchemy(ORM)の統合。

3.2 基本的なFlaskアプリケーションのセットアップ

python
from flask import Flask from flask_sqlalchemy import SQLAlchemy app = Flask(__name__) app.config['SQLALCHEMY_DATABASE_URI'] = 'sqlite:///site.db' app.config['SQLALCHEMY_TRACK_MODIFICATIONS'] = False db = SQLAlchemy(app) if __name__ == '__main__': app.run(debug=True)
  • SQLALCHEMY_DATABASE_URI: SQLiteデータベースのURLを指定します。
  • SQLALCHEMY_TRACK_MODIFICATIONS: Flaskのデータベースの変更追跡を無効化。

これで、FlaskアプリケーションとSQLiteデータベースが接続されました。

4. データベースモデルの設計

次に、Flask-SQLAlchemyを使用してデータベースモデルを設計します。今回は、ユーザーポストという2つのモデルを作成し、One-to-Manyリレーションシップを実現します。

4.1 ユーザーモデル(User Model)

python
class User(db.Model): id = db.Column(db.Integer, primary_key=True) username = db.Column(db.String(120), unique=True, nullable=False) email = db.Column(db.String(120), unique=True, nullable=False) posts = db.relationship('Post', backref='author', lazy=True)
  • id: ユーザーの一意のID(主キー)。
  • username: ユーザー名。
  • email: ユーザーのメールアドレス。
  • posts: PostとのOne-to-Manyリレーションを定義します。backref='author'により、ポストからユーザーにアクセスできるようになります。

4.2 ポストモデル(Post Model)

python
class Post(db.Model): id = db.Column(db.Integer, primary_key=True) title = db.Column(db.String(100), nullable=False) content = db.Column(db.Text, nullable=False) user_id = db.Column(db.Integer, db.ForeignKey('user.id'), nullable=False)
  • id: ポストの一意のID(主キー)。
  • title: ポストのタイトル。
  • content: ポストの内容。
  • user_id: ユーザーと関連するID(外部キー)。これにより、1人のユーザーが複数のポストを持つ関係が成立します。

5. One-to-Manyリレーションシップの実装

次に、データベースを初期化し、サンプルデータを挿入します。

5.1 データベースの作成

Flask-SQLAlchemyを使用して、モデルに基づいてデータベースを作成します。

python
with app.app_context(): db.create_all()

5.2 サンプルデータの挿入

python
# ユーザーを追加 user_1 = User(username='john_doe', email='[email protected]') db.session.add(user_1) db.session.commit() # ポストを追加 post_1 = Post(title='First Post', content='This is the first post', user_id=user_1.id) post_2 = Post(title='Second Post', content='This is the second post', user_id=user_1.id) db.session.add(post_1) db.session.add(post_2) db.session.commit()

これで、1人のユーザー(john_doe)が2つのポストを作成しました。

6. One-to-Manyリレーションシップを活用したデータの取得

Flaskアプリケーションで、ユーザーとそのポストを取得する方法を示します。

python
@app.route('/') def index(): user = User.query.first() # 最初のユーザーを取得 posts = user.posts # ユーザーに関連するポストを取得 return f'{user.username} の投稿: {[post.title for post in posts]}'
  • User.query.first(): 最初のユーザーを取得します。
  • user.posts: userに関連するポストを取得します。

7. 結果の表示

アプリケーションを実行して、ブラウザでアクセスします。

bash
python app.py

http://127.0.0.1:5000/にアクセスすると、john_doeの投稿が表示されるはずです。

8. 結論

FlaskとSQLiteを使って、One-to-Manyリレーションシップを実装する方法を紹介しました。このアプローチは、実際のWebアプリケーションで広く使用されているデータベース設計の一部です。Flask-SQLAlchemyを使うことで、リレーショナルデータベースとのやりとりを簡単に行うことができ、Webアプリケーションの構築が効率的になります。

Back to top button