🗃 FlaskでSQLiteとSQLAlchemyを使う基本入門
📝 はじめに
Flaskでユーザー情報や投稿内容などを保存・管理したいとき、データベースとの連携は不可欠です。特に、軽量でシンプルに使えるSQLiteと、Pythonのオブジェクト指向と相性が良いSQLAlchemyは、Flaskと組み合わせることでとても扱いやすくなります。
この記事では、SQLiteとSQLAlchemyを使って、Flaskアプリケーションにおける基本的なデータベース操作(CRUD)の方法を、初心者にもわかりやすく丁寧に解説します。
✅ この記事で学べること
- SQLAlchemyの特徴と基本概念
- FlaskでSQLAlchemyを使う準備方法
- データベーステーブル(モデル)の定義方法
- データベースの作成手順
- 基本的なデータ操作(追加・取得・更新・削除)
- アプリ全体のデータフローの理解
🧰 ライブラリのインストール
まずは必要なライブラリをインストールします。flaskとflask_sqlalchemyをインストールしてください。
pip install flask flask_sqlalchemy
これでFlaskとSQLAlchemyの準備は完了です。開発環境には仮想環境(venv)を使うことを推奨します。
⚙️ Flaskアプリの設定と初期化
from flask import Flask
from flask_sqlalchemy import SQLAlchemy
app = Flask(__name__)
app.config['SQLALCHEMY_DATABASE_URI'] = 'sqlite:///sample.db' # SQLiteファイルを作成
app.config['SQLALCHEMY_TRACK_MODIFICATIONS'] = False
db = SQLAlchemy(app)
ここではsample.dbという名前のSQLiteデータベースファイルをルートディレクトリに作成します。
SQLALCHEMY_TRACK_MODIFICATIONS はメモリ使用量を減らすために False にしておきましょう。
🏗️ モデル(テーブル)の作成
SQLAlchemyでは、Pythonのクラスでデータベースのテーブルを表現します。このクラスのことを「モデル」と呼びます。
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)
def __repr__(self):
return f'<User {self.username}>'
このUserクラスを作成することで、自動的にusersというテーブルが生成されます。
- id:主キー(自動で一意の値が振られます)
- username:ユニークな文字列(重複不可)
- email:ユニークでNULL不可な文字列
🔧 データベースの作成
モデル定義が完了したら、データベースファイルとテーブルを作成します。
with app.app_context():
db.create_all()
Flaskではapp_context()の中でデータベース操作を行う必要があります。これを忘れるとエラーになります。
このコマンドは、一度だけ実行すればOKです。
✍️ データの追加・取得・更新・削除(CRUD)
✅ データの追加(Create)
new_user = User(username='taro', email='taro@example.com')
db.session.add(new_user)
db.session.commit()
add()でデータを登録し、commit()で反映します。
🔍 データの取得(Read)
users = User.query.all()
for user in users:
print(user.username, user.email)
他にも .filter_by()や .first()を使って条件を指定できます。
user = User.query.filter_by(username='taro').first()
print(user.email)
📝 データの更新(Update)
user = User.query.filter_by(username='taro').first()
user.email = 'new_email@example.com'
db.session.commit()
オブジェクトを編集して、commit()で保存します。
❌ データの削除(Delete)
user = User.query.filter_by(username='taro').first()
db.session.delete(user)
db.session.commit()
削除したい対象を指定して、delete() と commit() を呼びます。
📌 まとめ
- SQLAlchemyを使えば、SQL文を書くことなくPythonだけでDB操作が可能です
- モデル定義により、テーブル構造を明確に設計できる
- CRUD操作(追加、取得、更新、削除)は非常にシンプルに記述できる
- 実際のアプリでは、これらをルーティングやフォーム入力と組み合わせて使います
株式会社ONE WEDGE
【Serverlessで世の中をもっと楽しく】 ONE WEDGEはServerlessシステム開発を中核技術としてWeb系システム開発、AWS/GCPを利用した業務システム・サービス開発、PWAを用いたモバイル開発、Alexaスキル開発など、元気と技術力を武器にお客様に真摯に向き合う価値創造企業です。
Discussion