プログラミング

FlaskでSQLAlchemyを使う方法

SQLAlchemyは、Pythonでデータベース操作を行うための強力で柔軟なツールです。Flaskとの組み合わせにより、Webアプリケーションのバックエンドに簡単にデータベース機能を統合することができます。以下では、FlaskアプリケーションでSQLAlchemyを使用する方法を完全かつ包括的に説明します。

1. SQLAlchemyとは?

SQLAlchemyは、PythonのORM(Object-Relational Mapping)ライブラリであり、データベースとのやりとりを効率化するためにオブジェクト指向の方法でデータベース操作を提供します。ORMを使用することで、SQLのクエリ文を直接書くことなく、Pythonのクラスやオブジェクトを通じてデータベースとやりとりできます。SQLAlchemyは、データベースを操作する際の抽象化レイヤーを提供し、複雑なクエリを簡潔に記述できます。

2. FlaskとSQLAlchemyのセットアップ

FlaskアプリケーションでSQLAlchemyを使用するためには、まず必要なパッケージをインストールします。

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

bash
pip install Flask SQLAlchemy

Flaskアプリケーションの設定

FlaskでSQLAlchemyを使用するためには、Flask-SQLAlchemyという拡張機能を使用します。以下の手順でFlaskアプリケーションを設定しましょう。

python
from flask import Flask from flask_sqlalchemy import SQLAlchemy app = Flask(__name__) # データベースのURL設定 app.config['SQLALCHEMY_DATABASE_URI'] = 'sqlite:///example.db' # SQLiteを使用する例 app.config['SQLALCHEMY_TRACK_MODIFICATIONS'] = False # 不要なメモリ使用を防ぐためにオフ # SQLAlchemyオブジェクトの作成 db = SQLAlchemy(app) if __name__ == '__main__': app.run(debug=True)

このコードでは、Flaskアプリケーションを作成し、SQLAlchemyインスタンスを設定します。データベースのURIは、使用するデータベースの種類(SQLite, PostgreSQL, MySQLなど)に合わせて変更します。

3. モデルの作成

SQLAlchemyを使用してデータベースのテーブルに対応するPythonクラスを定義します。これを「モデル」と呼びます。

モデルの定義

python
class User(db.Model): id = db.Column(db.Integer, primary_key=True) # 主キー username = db.Column(db.String(80), unique=True, nullable=False) email = db.Column(db.String(120), unique=True, nullable=False) def __repr__(self): return f'{self.username}>'

このコードでは、Userというモデルを定義しています。db.Modelを継承することで、SQLAlchemyが自動的にデータベーステーブルとのマッピングを行います。idusernameemailの各フィールドは、テーブルのカラムに対応しています。

4. データベースの作成

モデルを定義した後、データベースにテーブルを作成する必要があります。Flask-SQLAlchemyは、以下のように簡単にデータベースを作成できます。

python
with app.app_context(): db.create_all() # テーブルを作成

このコードを実行すると、SQLAlchemyが自動的にデータベースに必要なテーブルを作成します。

5. データの挿入

SQLAlchemyを使用して、データベースにデータを挿入する方法は非常に簡単です。以下のように、Userモデルのインスタンスを作成し、それをデータベースに追加します。

python
new_user = User(username='johndoe', email='[email protected]') db.session.add(new_user) db.session.commit() # 変更を確定

このコードでは、新しいUserオブジェクトを作成し、それをセッションに追加し、最後にcommitで変更を確定します。

6. データの取得

SQLAlchemyでは、データベースからデータを取得するためのクエリも簡単に記述できます。例えば、Userテーブルから全てのユーザーを取得するには、次のようにします。

python
users = User.query.all() # 全てのユーザーを取得 for user in users: print(user.username, user.email)

特定のユーザーを取得する場合は、filter_byfilterを使用します。

python
user = User.query.filter_by(username='johndoe').first() # 一致する最初のユーザーを取得 print(user.username, user.email)

7. データの更新

既存のレコードを更新する方法も簡単です。まず、対象のレコードを取得し、その後属性を変更してcommitします。

python
user = User.query.filter_by(username='johndoe').first() user.email = '[email protected]' # メールアドレスを更新 db.session.commit() # 変更を確定

8. データの削除

データの削除もSQLAlchemyを使えば簡単です。deleteメソッドを使って、対象のレコードを削除します。

python
user = User.query.filter_by(username='johndoe').first() db.session.delete(user) # ユーザーを削除 db.session.commit() # 変更を確定

9. マイグレーション

データベースのスキーマが変更された場合、マイグレーションが必要です。Flask-Migrateという拡張機能を使うことで、簡単にマイグレーションを管理できます。

Flask-Migrateのインストール

bash
pip install Flask-Migrate

マイグレーションのセットアップ

python
from flask_migrate import Migrate migrate = Migrate(app, db)

その後、コマンドラインで以下のコマンドを実行します。

bash
flask db init # マイグレーションの初期化 flask db migrate # マイグレーションスクリプトの作成 flask db upgrade # データベースを最新の状態に更新

10. 最後に

FlaskとSQLAlchemyを組み合わせることで、強力なデータベース操作を簡単に行うことができます。SQLAlchemyはORMとしてデータベースとのやりとりを抽象化し、より高い生産性を実現します。FlaskとSQLAlchemyを使用することで、よりモダンで柔軟なWebアプリケーションの構築が可能です。

Back to top button