SQLAlchemyとFlask_SQLAlchemyの違い

Python

以前の記事で、Flaskを使ったWEBアプリケーションを紹介しました

その中で、Flask-SQLAlchemyを使用しましたが、他にもSQLAlchemyというライブラリもあります

少し調べたので今回はその違いについて解説します


1. SQLAlchemy(単体のORMライブラリ)

SQLAlchemy は、Python でデータベースを操作するための ORM(オブジェクト・リレーショナル・マッピング) です
Flask 以外の Python アプリ(Django 以外のWebアプリ、デスクトップアプリ、スクリプト)でも使えます

インストール

pip install sqlalchemy

使用例(sqlite)

from sqlalchemy import create_engine, Column, Integer, String
from sqlalchemy.orm import declarative_base, sessionmaker

# データベースエンジンの作成
DATABASE_URL = "sqlite:///example.db"
engine = create_engine(DATABASE_URL)

# セッションの作成
SessionLocal = sessionmaker(bind=engine)
session = SessionLocal()

# モデルの定義
Base = declarative_base()

class User(Base):
    __tablename__ = "users"
    id = Column(Integer, primary_key=True)
    name = Column(String, nullable=False)

# テーブル作成
Base.metadata.create_all(engine)

# データの追加
new_user = User(name="Alice")
session.add(new_user)
session.commit()

メリット: Flask 以外のプロジェクトでも使える

デメリット: Flask との統合が手動で必要


2. Flask-SQLAlchemy(Flask専用の拡張)

Flask-SQLAlchemy は Flask 向けに SQLAlchemy を簡単に使えるようにした拡張ライブラリ です
SQLAlchemy の機能に加え、Flaskアプリとの統合がスムーズにできます

インストール

pip install flask-sqlalchemy

使用例(sqlite)

from flask import Flask
from flask_sqlalchemy import SQLAlchemy

app = Flask(__name__)

# Flask-SQLAlchemy の設定(簡単に使える)
app.config['SQLALCHEMY_DATABASE_URI'] = 'sqlite:///example.db'
db = SQLAlchemy(app)

# モデルの定義(SQLAlchemyとほぼ同じ)
class User(db.Model):
    id = db.Column(db.Integer, primary_key=True)
    name = db.Column(db.String, nullable=False)

# データベースの初期化
with app.app_context():
    db.create_all()

# ルートの定義
@app.route('/')
def index():
    return "Flask-SQLAlchemy is working!"

if __name__ == "__main__":
    app.run(debug=True)

メリット: Flask との統合が簡単、Flask の app.app_context() に対応

デメリット: Flask に依存するため、Flask 以外のアプリでは使えない


3. SQLAlchemy と Flask-SQLAlchemy の違い

  • Flask を使うなら Flask-SQLAlchemy を使うのが便利
  • Flask 以外でも使いたいなら SQLAlchemy を直接使う
  • 基本的な ORM の使い方はほぼ同じなので、どちらを使うかはプロジェクト次第

WEBアプリケーションでデータベースを扱うときの参考にしてください

コメント