Flaskでデータベースを使う基本!SQLAlchemyの導入方法をやさしく解説
生徒
「Flaskでデータベースを使いたいのですが、どこから始めればいいか分かりません。どうすればいいですか?」
先生
「Flaskでデータベースを扱うには、SQLAlchemy(エスキューエル・アルケミー)というとても便利なツールがあります。これを使えば、難しいデータベースの操作も簡単になりますよ。」
生徒
「SQLAlchemyって難しそうな名前ですね。初心者でも使えるんですか?」
先生
「もちろんです!プログラミングが初めての方でも大丈夫です。今回は、FlaskとSQLAlchemyを使って、データベースの基本をゆっくりていねいに解説していきますね。」
1. Flaskとデータベースをつなぐってどういうこと?
Flask(フラスク)は、Pythonで作られた軽量なWebフレームワークで、初心者でも扱いやすいのが特徴です。Webアプリでは、ユーザー情報や商品データなど、繰り返し使う情報を保存しておく必要があります。この保存場所が「データベース」で、ノートにメモを書き留めておくような感覚でデータを記録できます。
Flaskとデータベースをつなぐために使うのが、SQLAlchemy(エスキューエル・アルケミー)というライブラリです。データベースに直接命令を書くと専門的な知識が必要ですが、SQLAlchemyならPythonのコードだけで直感的にデータの保存・読み取りができます。
例えば、次のように「メモを書いたり読み返す」イメージでデータを扱えるようになります。
# ▼ SQLAlchemyを使うと、こんな雰囲気でデータを扱えます
# ユーザーというデータの入れ物を作る(後の章で詳しく説明)
class User(db.Model):
id = db.Column(db.Integer, primary_key=True)
name = db.Column(db.String(50))
# データを追加するイメージ
new_user = User(name="佐藤さん")
db.session.add(new_user)
db.session.commit() # ノートに“保存”する感じ
このように、SQLAlchemyは「Pythonの書き方でデータを扱えるようにしてくれる便利な道具」です。Flaskと組み合わせることで、データベースの扱いがぐっと簡単になり、プログラミング初心者でもデータの保存・管理に挑戦しやすくなります。
2. 仮想環境をつくろう(他のプロジェクトと混ざらないように)
Pythonでは「仮想環境(かそうかんきょう)」という、専用の作業部屋のようなものを作って、その中だけで作業をすると安心です。
下のコマンドで仮想環境を作れます。
python -m venv venv
作った仮想環境を使うには、以下のコマンドを打ちます(使っているパソコンによって違います)。
# MacやLinuxの人は
source venv/bin/activate
# Windowsの人は
venv\Scripts\activate
3. 必要なものをインストールしよう
次に、FlaskとSQLAlchemyをインストールします。「インストール」とは、必要な道具をパソコンに入れることです。
pip install flask flask_sqlalchemy
これでFlask本体と、データベースとつなぐためのSQLAlchemyが使えるようになります。
4. FlaskとSQLAlchemyをつなげる準備
次に、Flaskとデータベース(今回はSQLiteという簡単な種類)をつなぐ設定をします。
SQLite(エスキューエル・ライト)はファイル形式の軽いデータベースで、初心者にぴったりです。
from flask import Flask
from flask_sqlalchemy import SQLAlchemy
app = Flask(__name__)
# データベースの場所を指定(同じフォルダに app.db というファイルを作成)
app.config['SQLALCHEMY_DATABASE_URI'] = 'sqlite:///app.db'
# エラー警告をオフにする設定(必ず入れる)
app.config['SQLALCHEMY_TRACK_MODIFICATIONS'] = False
# データベースを使うための準備
db = SQLAlchemy(app)
5. データを保存するクラス(テーブル)を作ろう
データベースでは、データを「テーブル」という形で保存します。これは、表(ひょう)みたいなものです。
下のコードは、「ユーザー」というデータを表にした例です。名前やメールアドレスなどを保存できます。
class User(db.Model):
id = db.Column(db.Integer, primary_key=True) # 番号(自動で増える)
name = db.Column(db.String(50)) # 名前(文字列)
email = db.Column(db.String(100)) # メールアドレス
ここでdb.Columnは、それぞれの列(カラム)を表します。Integerは数字、Stringは文字を意味します。
6. データベースを作ってみよう
クラスを書いただけでは、データベースの表はまだ作られていません。
下のコードで、実際にapp.dbというデータベースファイルに「User」という表を作ります。
with app.app_context():
db.create_all()
app.app_context()は、Flaskアプリの中でデータベース操作をするために必要な特別な文です。
7. データを追加してみよう(登録)
テーブルができたら、次はデータを入れてみましょう。例えば「田中さん」というユーザーを登録するコードはこちらです。
new_user = User(name="田中太郎", email="tanaka@example.com")
db.session.add(new_user)
db.session.commit()
このsessionは「一時的な作業メモ」のようなもの。commit()で実際にデータベースに書き込みます。
8. データを取り出してみよう(表示)
登録したデータを表示することもできます。
users = User.query.all()
for user in users:
print(user.name, user.email)
田中太郎 tanaka@example.com
query.all()は、すべてのデータをまとめて取り出す命令です。
9. よくあるエラーとその対処法
プログラミング初心者がよくつまずくエラーに次のようなものがあります。
ModuleNotFoundError:インストールができていない。pip installをやり直してみましょう。RuntimeError: Working outside of application context:app.app_context()を忘れていることが原因です。OperationalError:テーブルを作る前にデータを登録しようとしているかも。db.create_all()を先に実行しましょう。
10. おまけ:requirements.txtでインストール管理しよう
仮想環境で使っているライブラリ(道具)を一覧にしておくと便利です。
pip freeze > requirements.txt
このファイルを使えば、別の人が同じ環境をすぐ再現できます。
pip install -r requirements.txt
まとめ
Flaskでデータベースを扱う流れをあらためて振り返ると、最初は専門用語が多くて戸惑いがちですが、一つひとつ手順を順番に追っていけば自然と理解できるようになることがわかります。とくに、FlaskとSQLAlchemyの組み合わせは、初心者がWebアプリケーションを学ぶ際の入り口としてとても分かりやすい構成になっており、現実のアプリ開発でも多くの場面で使われている基礎的な技術として身につけておく価値があります。今回学んだ内容を整理すると、仮想環境の準備、必要なライブラリのインストール、アプリ設定、モデルの作成、テーブル生成、データの保存と取得という流れがひとつの道筋としてつながり、実際のアプリ開発の中でどのように活用されるのかがより鮮明に見えてきます。 とりわけ、SQLiteのような扱いやすいデータベースは、初学者にとって強い味方になります。難しい設定や外部サーバーを必要としないため、学習に集中しやすく、自分の書いたコードがすぐに形となって目に見えるので、学びの実感が得やすいというメリットがあります。また、Flaskの構造とSQLAlchemyのモデル定義を理解することで、データベースの概念そのものが自然と身についていきます。表の構造、カラムの型、主キーの役割など、実際に触れながら覚えていくことで、どの項目がどのような意味を持っているのかが明確になり、これからの発展的な学習に役立つ知識の土台ができます。 今回紹介したコードでは、基本的なユーザーテーブルの作成からデータの保存・取得まで進みましたが、実務ではさらに複雑な構造のテーブルを作ったり、複数のテーブルを関連付けたりする場面が多くあります。その準備として、まずは今回の基本をしっかりと身につけることがとても重要です。テーブルに必要な項目を考え、どのような型を使うかを決め、適切に設定する力は、あらゆるWebアプリケーション開発の基礎となります。こうした考え方を身につけておくと、ブログ記事のようなシンプルなアプリだけでなく、予約システムや商品管理など、より現実的なアプリにも応用できるようになります。 また、よくあるエラーをどう防ぐか、どう解決するかといった点も欠かせない知識です。初めてデータベース操作をすると、必ずといっていいほど「アプリケーションコンテキスト」「テーブルが存在しない」「ライブラリが読み込めない」といったエラーに出会います。しかし、それぞれのエラーには原因があり、その原因を理解することでひとつずつ解決できるようになります。今回の内容は、その第一歩としてとても大切な経験になります。エラーと向き合い、解決する力はプログラミングを続けていくうえで大きな財産になります。 慣れてきたら、新しいカラムを追加してみたり、日付情報を保存したり、メールアドレスの重複を防ぐ設定を加えてみたりすると、より本格的なデータベース設計の練習になります。たとえば、登録日時を自動で保存したり、ログイン機能をつくるためにパスワードを保存したりといった機能追加は、非常に良い練習になります。こうした経験を積み重ねることで、自分の書くコードがアプリとして息をし始めるような実感が生まれます。 最後に、requirements.txtを使ってライブラリを管理する方法も紹介しましたが、これはプロジェクトを他の人と共有したり、将来同じ環境を再現するために欠かせない知識です。Webアプリ開発は一人で完結しないことが多く、環境構築を正しく引き継げることは立派なスキルのひとつです。今回の学びを通して、開発の流れを丁寧に理解し、実際に自分で作ってみることで、基礎から応用へと進むための大きな一歩を踏み出すことができたはずです。
追加のサンプルコードで理解を深めよう
ここでは、ユーザーに登録日時を追加したバージョンのモデル例を紹介します。
from datetime import datetime
from app import db
class User(db.Model):
id = db.Column(db.Integer, primary_key=True)
name = db.Column(db.String(50))
email = db.Column(db.String(100))
created_at = db.Column(db.DateTime, default=datetime.utcnow)
def __repr__(self):
return f'<User {self.name}>'
このように日時を保存するカラムを追加することで、ユーザーがいつ登録されたかを記録できます。実際のアプリでは非常によく使われる項目で、掲示板アプリやブログアプリの投稿時刻にも応用できます。こうした小さな改善の積み重ねがアプリの完成度を高め、実用的な機能へとつながっていきます。
生徒「今日の内容を振り返ってみると、FlaskとSQLAlchemyの流れがだいぶわかってきました。最初は難しく感じたけれど、テーブルを作ってデータを保存すると仕組みがつながって見えるようになりました。」
先生「とても良い気づきですね。実際に手を動かしてみると、仕組みが自分の中でつながっていく瞬間があります。今回覚えた流れは、今後どんなWebアプリをつくるときにも役に立ちますよ。」
生徒「次は複数のテーブルを使ったり、もっと実践的なアプリにも挑戦してみたいです。」
先生「ぜひ挑戦してみましょう。テーブルの関連付けやフォーム入力など、今の知識を土台にして学べることはたくさんあります。今回の内容をしっかり理解できたので、次のステップもきっと楽しく学べますよ。」
生徒「はい!今日学んだことを忘れないうちに、また自分でも動かしてみます!」