Ceeds Academy教材アプリ教材・症状語・タグで検索
索引グラフ試す
DB▸ORM

DB: ORM(SQLModel / SQLAlchemy で Python から操作)

hands-on所要 30分最新草稿
前提: DB: テーブル設計の基礎(正規化・主キー/外部キー)前提: SQL: 集計(COUNT / SUM / GROUP BY)→次: DB: NoSQL の基礎(いつ使う・Cosmos/Mongo)
意味グラフ(この教材と内容的に近い教材・1ネスト)
例え(Analogies)
ORM=通訳

ORMはPythonのオブジェクトとDBの表の間に立つ通訳。SQLを直接話さなくても、Pythonの言葉でDBに指示が通る。

概要

📍 db ▸ ORM ▸ SQLModel/SQLAlchemy | 種別: hands-on | facts_as_of 2026-06(SQLModel (SQLAlchemy 2.0) / Python 3.14)

公式ドキュメント — hands-on

🎞 スライド

ORM = オブジェクト ↔ テーブルの橋渡し

SQL を直接書かず、クラスで操作

対応(テキスト図)

Python DB
class Hero(table=True) ─▶ テーブル hero
id: PK ─▶ 主キー列
name: str ─▶ name 列
s.add(Hero(...)) ─▶ INSERT
select(Hero) ─▶ SELECT

利点と注意

型安全で書ける / N+1 などの遅さに注意

—
出典(sources)

sqlmodel.tiangolo.com ; SQLAlchemy 2.0 docs ; 2026-06確認

確認問題(Review-Questions)
SQLModelで「テーブルになるクラス」宣言の要点は?コード
基礎公式
解答・解説▾ 開く

class X(SQLModel, table=True): とし、Field(primary_key=True) で主キーを指定する。

ORMを使う利点を述べよ。記述
基礎公式
解答・解説▾ 開く

SQLを直接書かずPythonのオブジェクトで型安全にDB操作でき、可読性・保守性が上がる。

目次
例え概要公式ドキュメント出典確認問題
鮮度
最新
更新: 2026-06-15
次回棚卸し: 2026-12-15
周期: 6か月
版: SQLModel (SQLAlchemy 2.0) / Python 3.14

概要

ORM はオブジェクト↔テーブルの橋渡し。SQLModel(FastAPI 作者・Pydantic+SQLAlchemy)で Python クラスがそのままテーブルになる。SQL を直接書かず型安全に操作できる。

公式ドキュメント準拠(SQLModel / SQLAlchemy 2.0)

from sqlmodel import SQLModel, Field, Session, create_engine, select

class Hero(SQLModel, table=True):
    id: int | None = Field(default=None, primary_key=True)
    name: str

engine = create_engine("sqlite:///db.sqlite")
SQLModel.metadata.create_all(engine)

with Session(engine) as s:
    s.add(Hero(name="A")); s.commit()
    heroes = s.exec(select(Hero)).all()
  • クラス=テーブル(table=True)、Field(primary_key=True)、Session/select で操作。FastAPI と相性◎。

出典: SQLModel / SQLAlchemy 2.0

🧭 誤解訂正集

よくある誤解 正しい理解
ORM なら SQL を知らなくてよい 遅いクエリ(N+1 等)の調査には SQL の理解が要る
クラスを書けば表ができる create_all 等でテーブル作成が要る
ORM は常に速い 都度取得(N+1)で遅くなることがある

📖 用語

  • ORM … オブジェクトとテーブルを対応づけ、SQL を書かず操作する仕組み。
  • SQLModel … Pydantic と SQLAlchemy を統合した ORM(FastAPI と親和)。
  • Session … DB との作業単位(追加・取得・コミットを束ねる)。
  • N+1 問題 … 関連を1件ずつ都度取得して遅くなる典型的な落とし穴。

✅ 確認の目安(can-do)

SQLModel でクラス=テーブルを定義し追加・取得でき、**「ORM の利点と、N+1 など SQL 理解が要る場面」**を説明できる。

⚠️ エラー復旧集

症状 原因 復旧
no such table テーブル未作成 create_all を実行
クエリが遅い(N+1) 関連を都度取得 必要に応じ明示ロード/JOIN