⑧Web開発

WebアプリとデータベースをSQLAlchemyで繋ぐ【FastAPI+ORM入門】

⑧Web開発
記事内に広告が含まれています。

SQLAlchemyはPythonの最もよく使われるORM(Object Relational Mapper)です。SQLを直接書かずにPythonのオブジェクトとしてDBを操作できます。FastAPIと組み合わせた実践的な使い方を解説します。

SQLAlchemyのインストール

pip install sqlalchemy

モデルの定義とDB接続

from sqlalchemy import create_engine, Column, Integer, String, DateTime
from sqlalchemy.orm import DeclarativeBase, Session
from datetime import datetime

DATABASE_URL = "sqlite:///./app.db"
engine = create_engine(DATABASE_URL)

class Base(DeclarativeBase):
    pass

class User(Base):
    __tablename__ = "users"
    id = Column(Integer, primary_key=True, autoincrement=True)
    name = Column(String, nullable=False)
    email = Column(String, unique=True, nullable=False)
    created_at = Column(DateTime, default=datetime.utcnow)

Base.metadata.create_all(engine)

CRUD操作

with Session(engine) as session:
    # 作成
    user = User(name="Taro", email="taro@example.com")
    session.add(user)
    session.commit()

    # 取得
    users = session.query(User).all()
    user = session.query(User).filter(User.id == 1).first()

    # 更新
    user.name = "Jiro"
    session.commit()

    # 削除
    session.delete(user)
    session.commit()

FastAPIとの連携

from fastapi import FastAPI, Depends
from sqlalchemy.orm import Session

app = FastAPI()

def get_db():
    with Session(engine) as session:
        yield session

@app.get("/users")
def list_users(db: Session = Depends(get_db)):
    return db.query(User).all()

まとめ

  • ORMはSQLを書かずにPythonオブジェクトでDBを操作する仕組み
  • Baseを継承してクラスを定義するだけでテーブルを作成できる
  • FastAPIのDependsでDBセッションを各エンドポイントに注入できる

コメント

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