Flask-SQLAlchemyは、FlaskアプリケーションとSQLAlchemyを統合するための拡張機能で、データベース操作を簡便に行えるようにするものです。この拡張を使用することで、SQLAlchemyをFlaskのコンテキスト内で簡単に使用でき、データベースとのやり取りが直感的で効率的になります。本記事では、Flask-SQLAlchemyのセットアップから基本的な使い方までを、実際のコード例を交えて説明します。
1. Flask-SQLAlchemyのインストール
まず最初に、Flask-SQLAlchemyをインストールします。以下のコマンドでインストール可能です:
bashpip install Flask-SQLAlchemy
これにより、FlaskアプリケーションにSQLAlchemyを統合するために必要なパッケージがインストールされます。
2. Flaskアプリケーションのセットアップ
Flask-SQLAlchemyを使うためには、Flaskアプリケーションの設定が必要です。次に示すのは、基本的なFlaskアプリケーションのセットアップ例です。
pythonfrom flask import Flask
from flask_sqlalchemy import SQLAlchemy
app = Flask(__name__)
# データベースの設定
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)
このコードでは、SQLALCHEMY_DATABASE_URIを使用してデータベースのURIを設定しています。ここではSQLiteデータベースを使用していますが、他のデータベース(MySQLやPostgreSQLなど)を使用する場合は、適切なURIを指定することができます。
3. モデルの作成
Flask-SQLAlchemyでは、データベースのテーブルを「モデル」として定義します。モデルは、SQLAlchemyのdb.Modelを継承するクラスとして定義され、テーブルの列はクラスの属性として表現されます。
例えば、Userというテーブルを作成する場合、次のようにモデルを定義します:
pythonclass 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)
def __repr__(self):
return f'{self.username} >'
このクラス定義では、Userモデルがid、username、emailという3つのカラムを持っていることを示しています。idは主キーであり、usernameとemailは一意である必要があり、nullable=Falseによって空白が許可されないカラムであることが指定されています。
4. データベースの初期化
モデルを定義した後、データベースを初期化して、テーブルを作成する必要があります。以下のコマンドでデータベースを作成します:
pythonwith app.app_context():
db.create_all()
これにより、Flaskアプリケーションが動作している間に、SQLAlchemyがUserテーブルを作成します。db.create_all()はすべてのモデルに対してテーブルを作成します。
5. データの挿入
次に、データベースにデータを挿入する方法を見ていきます。Flask-SQLAlchemyでは、add()メソッドを使ってオブジェクトを追加し、commit()で変更を確定させます。
以下のコードは、新しいユーザーをデータベースに追加する方法を示しています:
pythonnew_user = User(username='john_doe', email='[email protected]')
db.session.add(new_user)
db.session.commit()
このコードでは、新しいUserオブジェクトを作成し、それをセッションに追加して、commit()メソッドでデータベースに保存しています。
6. データのクエリ(検索)
Flask-SQLAlchemyでは、SQLAlchemyのクエリビルダーを使用してデータを検索することができます。次に示すのは、Userテーブルからusernameが’john_doe’のユーザーを検索する方法です:
pythonuser = User.query.filter_by(username='john_doe').first()
print(user.email)
ここでは、filter_by()メソッドを使って条件に合うレコードを絞り込み、first()で最初の結果を取得しています。first()を使うことで、条件に一致する最初のレコードを取得できます。
7. データの更新
既存のデータを更新する場合、まず該当するオブジェクトを検索し、その属性を変更します。そして、変更をデータベースに反映させるためにcommit()を呼び出します。
以下は、john_doeというユーザーのメールアドレスを更新する例です:
pythonuser = User.query.filter_by(username='john_doe').first()
user.email = '[email protected]'
db.session.commit()
このように、user.emailを新しい値に変更した後、db.session.commit()で変更がデータベースに反映されます。
8. データの削除
データを削除する場合は、delete()メソッドを使用します。次のコードは、特定のユーザーを削除する方法を示しています:
pythonuser = User.query.filter_by(username='john_doe').first()
db.session.delete(user)
db.session.commit()
このコードでは、userオブジェクトを取得し、delete()メソッドでそれを削除しています。削除後、commit()メソッドを呼び出して変更を確定します。
9. Flask-SQLAlchemyを使ったフォームの処理
Flask-SQLAlchemyを使ってデータベースにデータを挿入する際に、HTMLフォームを使用することが一般的です。次に、フォームを使って新しいユーザーをデータベースに追加する方法を示します。
まず、HTMLフォームを作成します:
html<form method="POST" action="/add_user">
<input type="text" name="username" placeholder="Username">
<input type="email" name="email" placeholder="Email">
<button type="submit">Submitbutton>
form>
そして、Flaskでフォームデータを処理します:
pythonfrom flask import request
@app.route('/add_user', methods=['POST'])
def add_user():
username = request.form['username']
email = request.form['email']
new_user = User(username=username, email=email)
db.session.add(new_user)
db.session.commit()
return 'User added!'
これで、フォームから送信されたデータをデータベースに追加することができます。
10. 終わりに
Flask-SQLAlchemyを使用することで、Flaskアプリケーション内でのデータベース操作が非常に簡単になります。SQLAlchemyの強力な機能を活用することで、ORM(Object Relational Mapping)を利用して、SQLを直接書くことなくデータベースを扱うことができます。本記事で紹介した基本的な操作(データの挿入、検索、更新、削除)を使いこなすことで、効率的にFlaskアプリケーションを開発できるようになるでしょう。
Flask-SQLAlchemyは、スケーラブルなウェブアプリケーションを開発するための強力なツールとなるでしょう。

