Back to Blog

Flask-SQLAlchemyとは?FlaskでDBを使おう

flask

2024年7月5日

こんにちは!

今回の記事では、FlaskのSQLAlchemy(エスキューエルアルケミー)について解説します。

FlaskはPythonで書かれた軽量のWebフレームワークであり、シンプルで直感的な設計により、多くの開発者に利用されています。

その中でデータベースとのやり取りを簡素化し、効率的にするための拡張機能がいくつか存在しますが、その代表的なものが「Flask-SQLAlchemy」です。

今回は、Flask SQLAlchemyとは何なのか、詳しく解説します!

Flask-SQLAlchemyとは?

Flask-SQLAlchemyは、FlaskとSQLAlchemyを統合するための拡張機能です。

要するに、FlaskでSQLAlchemyを使えるようにしたものです。

そもそもSQLAlchemyとは何なのでしょうか?

SQLAlchemyとは?

SQLAlchemyとは、PythonのプログラムからRDB(リレーショナルデータベース)にアクセスするための高機能なSQLツールです。

SQLAlchemyはORMの1つです。ORMとは、オブジェクト指向プログラミングと関係データベースの互換性を向上させるために設計されたプログラミング技術です。

簡単に言うと、コード上にSQLを記述せずに、データベースを操作することが可能です。

SQLAlchemyを使う場合と使わない場合

SQLAlchemyを使う場合と使わない場合を比較してみましょう。

SQLAlchemy(ORM)を使う場合、プログラムのコードは以下のように記述します。データの挿入部分だけ抽出します。

# データの挿入
new_user = User(username='john_doe', email='john@example.com')
session.add(new_user)
session.commit()

このコードは、直感的で分かりやすいという利点があります。

反対にSQLAlchemy(ORM)を使わない場合は、SQLを直接記述する必要があります。

# データの挿入
cursor.execute('''
INSERT INTO users (username, email) VALUES (?, ?)
''', ('john_doe', 'john@example.com'))
conn.commit()

SQLAlchemy(ORM)を使うメリット

SQLAlchemy(ORM)を使うと以下のようなメリットがあります。

  • コードが簡潔になる
  • 他のデータベースへの移行が簡単
  • 保守性が高い

まず、一つ目のメリットはコードが簡潔になります。先ほどの例のとおり、オブジェクト指向のようにDBを操作できるので、コードが分かりやすくなります。

また、ORMはテーブルの定義をモデルとしてClassに記述します。そのため、PostgreSQLや MySQLなど異なるデータベースへの移行が簡単になります。

さらに、コードの変更が容易で、スキーマ変更にも柔軟に対応できるため保守性が高くなります。

このようなメリットがあるので、SQLAlchemyにあります。

Flask-SQLAlchemyはSQLAlchemyをFlaskで使えるようにしたものです。Flaskに導入することで、簡単にDBの操作ができるようになります。

Flask-SQLAlchemyの導入

Flask-SQLAlchemyインストール

Flask-SQLAlchemyをインストールするには、以下のコマンドを実行します。

pip install Flask Flask-SQLAlchemy

基本的な設定

FlaskアプリケーションにFlask-SQLAlchemyを設定するためには、以下のような基本的なコードが必要です。

from flask import Flask
from flask_sqlalchemy import SQLAlchemy

app = Flask(__name__)
app.config['SQLALCHEMY_DATABASE_URI'] = 'sqlite:///example.db' 

db = SQLAlchemy(app)

“SQLALCHEMY_DATABASE_URI”にはデータベースのURIを指定します。上記の例ではSQLiteを使用していますが、他のデータベース(PostgreSQL, MySQLなど)も同様に設定可能です。

これで、Flask-SQLAlchemyの導入が完了です。次にモデルの定義を行います。

モデルの定義

モデルの定義とは、データベースのテーブルの構造を定義することです。

app.pyかmodel.pyに以下のように設定します。

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)

この例では、Userテーブルを作成して、id、username、emailのカラムを作成しています。

db.Columnを使って各フィールドのデータ型や制約を指定します。

データの操作

次は、データの操作方法です。

データの挿入

新しいユーザーをデータベースに追加するには、以下のようにします。

new_user = User(username='john', email='john@example.com')
db.session.add(new_user)
db.session.commit()

db.session.addを使用して新しいユーザーオブジェクトをセッションに追加し、db.session.commitでデータベースにコミットします。

データの取得

データベースからユーザーを取得するには、User.queryを使用します。この例では、ユーザー名がjohnのユーザーを取得し、そのメールアドレスを出力しています。

user = User.query.filter_by(username='john_doe').first()
print(user.email)

データの更新

ユーザーの情報を更新するには、まず該当ユーザーを取得し、その属性を変更してコミットします。

user = User.query.filter_by(username='john').first()
user.email = 'john.doe@example.com'
db.session.commit()

データの削除

ユーザーを削除するには、以下のように実行します。

user = User.query.filter_by(username='john_doe').first()
db.session.delete(user)
db.session.commit()

このように、Flask-SQLAlchemyをつかってDBの操作を行います。

参考リンク

まとめ

今回の記事では、FlaskのSQLAlchemy(エスキューエルアルケミー)について解説しました。

Webアプリケーションを開発する上で、データベースの操作は必須になります。Flask-SQLAlchemyはDBの操作を簡単に実装できるので、是非覚えておきましょう。

本記事がWeb開発の助けになれば幸いです。

ここまでお読みいただきありがとうございました。

Webの知識を作りながら学ぶ
Flask WebAcademy

SNSアプリやチャットアプリ、さまざまなアプリを作りながら学べる実践的なカリキュラム

詳細を見る