FlaskはPythonで手軽にWebアプリケーションを開発できる軽量フレームワークです。SQLiteはインストール不要で使える軽量なデータベースです。これらを組み合わせれば、簡単なデータベースを使ったアプリを素早く構築できます。
この記事では、FlaskとSQLiteを使ってWebアプリケーションにデータベース機能を組み込む方法を、初学者向けにわかりやすく解説します。

SQLiteの概要
SQLiteはファイルベースの軽量なDBMS(データベース管理システム)で、設定不要ですぐに使えます。サーバーを必要としないため、アプリケーションと一緒にそのまま配布できます。小規模なアプリケーションや学習用途、プロトタイピングに最適です。Flaskとの接続は、SQLAlchemyというORM(Object Relational Mapper)を使うことで、より簡単になります。
Flaskアプリの基本構成
from flask import Flask
from flask_sqlalchemy import SQLAlchemy
app = Flask(__name__)
app.config['SQLALCHEMY_DATABASE_URI'] = 'sqlite:///sample.db'
db = SQLAlchemy(app)
FlaskとSQLiteの連携方法
FlaskアプリでSQLiteを使用するには、Flask-SQLAlchemyという拡張ライブラリを使います。インストールは以下のコマンドで可能です:
pip install flask_sqlalchemy
以下のようにFlaskアプリの設定ファイルにデータベースの場所(URI)を指定し、SQLAlchemyを初期化することで接続が完了します。
from flask import Flask
from flask_sqlalchemy import SQLAlchemy
app = Flask(__name__)
app.config['SQLALCHEMY_DATABASE_URI'] = 'sqlite:///sample.db'
db = SQLAlchemy(app)
この設定により、同じディレクトリに「sample.db」という名前のSQLiteデータベースファイルが作成されます。
SQLAlchemyの概要と設定
SQLAlchemyは、Pythonコードでデータベースの操作ができるORMライブラリです。SQL文を直接書かずに、安全で読みやすいコードが書けるのが特徴です。
主な機能:
- テーブル構造の定義
- データの追加・取得・更新・削除(CRUD)
- クエリのフィルタや並び替え
- リレーション(外部キー)によるテーブル結合も可能
データベースモデルの定義
以下のように、クラスでデータベースの構造を定義します。
class User(db.Model):
id = db.Column(db.Integer, primary_key=True)
name = db.Column(db.String(80), nullable=False)
email = db.Column(db.String(120), unique=True, nullable=False)
この定義で、User
テーブルにはid
, name
, email
の3つの列が作成されます。
データベースの作成ステップ
モデル定義の後、以下のステップでSQLiteデータベースファイルとテーブルを作成します。
ステップ 1: Flaskアプリの準備
以下のようなファイル構成で始めます:
project_folder/
├── app.py
├── models.py
└── sample.db(自動生成されます)
ステップ 2: Flaskアプリの作成とモデル定義
models.py:
from flask_sqlalchemy import SQLAlchemy
db = SQLAlchemy()
class User(db.Model):
id = db.Column(db.Integer, primary_key=True)
name = db.Column(db.String(80), nullable=False)
email = db.Column(db.String(120), unique=True, nullable=False)
app.py:
from flask import Flask
from models import db, User
app = Flask(__name__)
app.config['SQLALCHEMY_DATABASE_URI'] = 'sqlite:///sample.db'
db.init_app(app)
if __name__ == '__main__':
with app.app_context():
db.create_all() # データベースとテーブルを作成
print("データベースの初期化が完了しました。")
この構成で python app.py
を実行すると、データベースファイルとテーブルが自動的に作成されます。
CRUD操作
データの追加・取得・更新・削除は次のように行います。
# 追加
new_user = User(name="Taro", email="taro@example.com")
db.session.add(new_user)
db.session.commit()
# 取得
user = User.query.filter_by(name="Taro").first()
# 更新
user.name = "Jiro"
db.session.commit()
# 削除
db.session.delete(user)
db.session.commit()
操作を行った後は必ずdb.session.commit()
で反映させましょう。
Flaskアプリの例
ルート(/
)にアクセスしたとき、データベースからすべてのユーザーを取得し、テンプレートで表示します。
from flask import Flask, render_template
@app.route('/')
def index():
users = User.query.all()
return '<br>'.join([u.name for u in users])
HTMLでのデータ表示
FlaskではJinja2テンプレートエンジンを使って、HTML内にデータを挿入できます。Jinja2はPythonの変数や構文をHTMLに埋め込むためのテンプレートエンジンです。
templates/index.html
:
<!DOCTYPE html>
<html>
<head><title>Users</title></head>
<body>
<ul>
{% for user in users %}
<li>{{ user.name }} ({{ user.email }})</li>
{% endfor %}
</ul>
</body>
</html>
※ render_template
関数を使うために、templates/
ディレクトリをFlaskアプリのルートに作成しておく必要があります。
よくあるエラーと対処法
エラー1: RuntimeError: Working outside of application context.
原因: db.create_all()
などをアプリケーションコンテキスト外で実行した。
対処法:
with app.app_context():
db.create_all()
エラー2: IntegrityError: UNIQUE constraint failed
原因: 一意性制約のあるカラム(例: email)に重複したデータを登録しようとした。
対処法: 登録前にデータの存在を確認するか、例外処理で対応する。
おわりに
SQLiteは小規模のアプリケーションに最適で、Flaskとの組み合わせは実用性が高いです。
次のステップでは、ユーザー登録やログイン機能の実装に進んでみましょう!