※このページではアフィリエイト広告を利用しています

FlaskとSQLiteで始めるWebアプリのデータ管理

Python

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との組み合わせは実用性が高いです。

次のステップでは、ユーザー登録やログイン機能の実装に進んでみましょう!

タイトルとURLをコピーしました