Flask-SQLAlchemyは、FlaskアプリケーションでSQLAlchemyを簡単に使用できるようにする拡張機能です。SQLAlchemyは、Pythonで最も人気のあるORM(Object Relational Mapping)ライブラリの一つで、データベース操作をオブジェクト指向で行うことができ、SQLを直接書かずにデータベースと対話することが可能です。Flask-SQLAlchemyを使用すると、Flaskアプリケーション内で効率的にデータベース操作を行うことができ、開発者にとって非常に便利です。
本記事では、Flask-SQLAlchemyを使ってデータベースを操作するための基本的な方法から応用的な使い方までを順を追って解説します。

1. Flask-SQLAlchemyのインストール
Flask-SQLAlchemyを使い始めるには、まず必要なライブラリをインストールします。以下のコマンドを実行してインストールしましょう。
bashpip install Flask-SQLAlchemy
2. 基本的なセットアップ
Flaskアプリケーションをセットアップし、Flask-SQLAlchemyを使ってデータベースに接続する方法を見ていきましょう。
pythonfrom flask import Flask
from flask_sqlalchemy import SQLAlchemy
# Flaskアプリケーションを作成
app = Flask(__name__)
# データベースのURIを設定(例: SQLiteの場合)
app.config['SQLALCHEMY_DATABASE_URI'] = 'sqlite:///example.db'
app.config['SQLALCHEMY_TRACK_MODIFICATIONS'] = False
# SQLAlchemyのインスタンスを作成
db = SQLAlchemy(app)
ここで重要なのは、SQLALCHEMY_DATABASE_URI
です。これにより、Flaskアプリケーションがどのデータベースを使用するかを指定します。例えば、SQLiteの場合は上記のように設定できます。PostgreSQLやMySQLなど他のデータベースを使用する場合は、適切なURIを設定する必要があります。
3. モデルの定義
次に、SQLAlchemyを使ってデータベースモデルを定義します。Flask-SQLAlchemyでは、クラスを使ってテーブルを定義します。このクラスは、SQLAlchemyのModel
クラスを継承する必要があります。
例えば、簡単なUser
テーブルを作成する場合、以下のようにモデルを定義します。
pythonclass 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} >'
ここで重要なのは、db.Model
を継承している点です。各フィールド(カラム)はdb.Column
で定義されます。primary_key=True
はそのカラムが主キーであることを示し、nullable=False
はそのカラムにNULL
を許可しないことを意味します。
4. データベースの作成
モデルを定義したら、実際にデータベースを作成するためにマイグレーションを行います。まず、Flask-SQLAlchemyでデータベースを作成する方法を見てみましょう。
python# データベースの作成
with app.app_context():
db.create_all()
create_all()
メソッドは、定義したモデルに基づいてデータベースにテーブルを作成します。この操作は、まだデータベースが作成されていない場合に実行します。
5. データの追加
データベースにデータを挿入するためには、モデルインスタンスを作成し、db.session.add()
を使用してセッションに追加し、db.session.commit()
でコミットします。
python# 新しいユーザーを追加
new_user = User(username='johndoe', email='[email protected]')
db.session.add(new_user)
db.session.commit()
上記のコードで、新しいUser
オブジェクトを作成し、それをデータベースに追加しています。commit()
を呼び出すことで、データベースに変更が確定します。
6. データのクエリ
データベースからデータを取得するためには、SQLAlchemyのクエリビルダを使用します。例えば、すべてのユーザーを取得するには以下のように記述します。
python# すべてのユーザーを取得
users = User.query.all()
for user in users:
print(user.username, user.email)
特定のユーザーを条件で取得したい場合、filter_by()
を使うことができます。
python# ユーザー名が"johndoe"のユーザーを取得
user = User.query.filter_by(username='johndoe').first()
print(user.email)
7. データの更新
既存のデータを更新するには、まず対象のレコードを取得し、その後、フィールドの値を変更します。そして、再度commit()
で変更を確定します。
python# ユーザー情報を更新
user = User.query.filter_by(username='johndoe').first()
user.email = '[email protected]'
db.session.commit()
8. データの削除
データを削除するには、対象のレコードを取得した後、db.session.delete()
で削除し、commit()
で確定します。
python# ユーザーを削除
user = User.query.filter_by(username='johndoe').first()
db.session.delete(user)
db.session.commit()
9. トランザクション管理
SQLAlchemyでは、トランザクション管理も重要な部分です。特に、複数のデータベース操作を一度に行いたい場合は、トランザクションを利用して一貫性を保つことができます。
python# トランザクションを使用した操作
try:
user1 = User(username='user1', email='[email protected]')
user2 = User(username='user2', email='[email protected]')
db.session.add(user1)
db.session.add(user2)
db.session.commit()
except:
db.session.rollback()
ここでは、2人のユーザーを追加する操作を行っています。何かエラーが発生した場合は、rollback()
を使用して変更を取り消します。
10. 結論
Flask-SQLAlchemyは、Flaskアプリケーションでデータベースを簡単に操作するための強力なツールです。SQLAlchemyの高度な機能をフルに活用することができ、ORMを使ってデータベース操作をオブジェクト指向で行えるので、SQL文を直接書く手間が省けます。本記事で紹介した基本的な使い方を理解すれば、Flaskアプリケーションでのデータベース操作がより効率的に行えるようになるでしょう。