以前の記事で、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アプリケーションでデータベースを扱うときの参考にしてください
コメント