SQLiteは、軽量で組み込み型のリレーショナルデータベース管理システム(RDBMS)であり、特に小規模なアプリケーションやプロジェクトに最適です。FlaskはPythonで作られた軽量なWebアプリケーションフレームワークであり、SQLiteとの組み合わせにより、開発者は非常に効率的にデータベースを操作できます。本記事では、FlaskアプリケーションにおけるSQLiteの使用方法について、基本的な設定からデータベース操作、さらにはエラー処理や最適化まで、完全かつ包括的に説明します。
1. Flaskアプリケーションのセットアップ
まず、FlaskとSQLiteを使用するために必要な環境を準備します。

必要なライブラリのインストール
Flaskは公式のパッケージマネージャーであるpip
を使用してインストールできます。まずはFlaskとSQLiteの依存関係をインストールします。
bashpip install Flask pip install Flask-SQLAlchemy
Flask-SQLAlchemy
は、FlaskアプリケーションにSQLAlchemyというORM(Object Relational Mapper)を簡単に統合できる拡張機能です。SQLiteはSQLAlchemyでサポートされているため、特に設定を行うことなく使用できます。
Flaskアプリケーションの作成
次に、Flaskアプリケーションを作成します。以下は、簡単なFlaskアプリケーションの基本構造です。
pythonfrom flask import Flask
from flask_sqlalchemy import SQLAlchemy
# Flaskアプリケーションのインスタンスを作成
app = Flask(__name__)
# SQLiteデータベースの設定
app.config['SQLALCHEMY_DATABASE_URI'] = 'sqlite:///test.db'
app.config['SQLALCHEMY_TRACK_MODIFICATIONS'] = False # 不要なトラッキングを無効にする
# SQLAlchemyのインスタンスを作成
db = SQLAlchemy(app)
# アプリケーションのルート
@app.route('/')
def home():
return "FlaskとSQLiteのデータベースに接続しました!"
if __name__ == '__main__':
app.run(debug=True)
このコードでは、FlaskとSQLAlchemyをインポートし、SQLiteデータベースを設定しています。SQLALCHEMY_DATABASE_URI
でSQLiteのデータベースファイル(test.db
)のパスを指定しています。
2. モデルの作成
Flaskアプリケーションでデータベースを操作するためには、まず「モデル」を作成します。モデルは、データベースのテーブル構造をPythonのクラスとして定義したものです。
例えば、簡単なUser
テーブルを作成する場合、以下のようにモデルを定義します。
pythonclass 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)
def __repr__(self):
return f'{self.username} >'
-
db.Column
はデータベースのフィールド(カラム)を定義します。 -
primary_key=True
はそのカラムが主キーであることを意味します。 -
nullable=False
はそのカラムにNULL
値が入らないことを意味します。 -
unique=True
はそのカラムに重複する値を許可しない設定です。
3. データベースの作成
モデルを定義したら、実際にSQLiteデータベースを作成する必要があります。次のコマンドでデータベースを作成できます。
pythonwith app.app_context():
db.create_all()
このコードは、Flaskのアプリケーションコンテキスト内でデータベースを作成します。db.create_all()
は、定義した全てのモデルに対応するテーブルをSQLiteデータベース内に作成します。
4. データの挿入
次に、ユーザー情報をデータベースに挿入する方法を説明します。新しいUser
オブジェクトを作成し、それをデータベースに追加する手順です。
python@app.route('/add_user')
def add_user():
user = User(username="testuser", email="testuser@example.com")
db.session.add(user)
db.session.commit()
return "ユーザーが追加されました!"
ここで、db.session.add(user)
はデータベースセッションにユーザーオブジェクトを追加し、db.session.commit()
で変更を確定させます。
5. データの取得
次に、データベースからデータを取得する方法です。例えば、User
テーブルから全てのユーザーを取得する場合、以下のように記述します。
python@app.route('/users')
def get_users():
users = User.query.all()
return f"ユーザー一覧: {users}"
-
User.query.all()
は、User
テーブルからすべてのレコードを取得します。
個別のユーザーを取得する場合は、以下のようにfilter_by
を使います。
python@app.route('/user/' )
def get_user(id):
user = User.query.filter_by(id=id).first()
return f"ユーザー情報: {user}"
-
filter_by(id=id)
は、id
が一致するユーザーを検索します。 -
first()
は、最初の一致するレコードを返します。
6. データの更新
データベース内のデータを更新するには、以下のようにします。
python@app.route('/update_user/' )
def update_user(id):
user = User.query.get(id)
if user:
user.username = "newusername"
db.session.commit()
return f"ユーザー名が更新されました: {user.username}"
else:
return "ユーザーが見つかりません"
-
query.get(id)
でIDが一致するレコードを取得します。 -
更新したいフィールドに新しい値を代入し、
db.session.commit()
で変更を確定します。
7. データの削除
データベースからレコードを削除する方法も簡単です。
python@app.route('/delete_user/' )
def delete_user(id):
user = User.query.get(id)
if user:
db.session.delete(user)
db.session.commit()
return f"ユーザーが削除されました: {user.username}"
else:
return "ユーザーが見つかりません"
-
db.session.delete(user)
は、指定したレコードを削除します。 -
db.session.commit()
で変更を確定します。
8. エラーハンドリング
データベース操作において、エラーが発生する可能性があります。例えば、IntegrityError
などのエラーです。このような場合にエラーをキャッチして処理する方法を示します。
pythonfrom sqlalchemy.exc import IntegrityError
@app.route('/add_user_safe')
def add_user_safe():
try:
user = User(username="testuser", email="testuser@example.com")
db.session.add(user)
db.session.commit()
return "ユーザーが追加されました!"
except IntegrityError:
db.session.rollback()
return "エラー: ユーザー名またはメールアドレスが重複しています"
ここでは、IntegrityError
をキャッチしてトランザクションをロールバックし、エラーメッセージを返しています。
9. 最適化
FlaskとSQLiteを使用する際に最適化が必要な場合もあります。例えば、大量のデータを一度に処理する場合、バッチ処理を使用することが効果的です。
python@app.route('/bulk_insert')
def bulk_insert():
users = [
User(username=f"user{i}", email=f"user{i}@example.com") for i in range(1000)
]
db.session.bulk_save_objects(users)
db.session.commit()
return "1000人のユーザーが一度に追加されました"
bulk_save_objects
を使用すると、大量のレコードを一度にデータベースに挿入できます。
10. 結論
FlaskとSQLiteを組み合わせることで、軽量で効率的なデータベース操作が可能になります。基本的な設定から、データの挿入、取得、更新、削除まで、非常に簡単に実装できるため、Flaskの小規模なプロジェクトやプロトタイプ開発に最適です。最適化を適切に行うことで、さらに効率的なデータベース操作が可能になります。