SQLModelとSQLAlchemyの違いって何??

PythonでデータベースをさわるとよくでてくるのがSQLAlchemyとSQLModel。「名前は似てるけど何が違うの?」「どっちを使えばいいの?」と迷ってしまう人も多いはず。今回はこの2つの違いを、できるだけわかりやすく説明します!

そもそもSQLAlchemyって何?

SQLAlchemyは、Pythonでデータベースを操作するためのライブラリです。SQL文を直接書かなくても、Pythonのコードでデータベースを扱えるようにしてくれる便利なツール、と思ってください。

例えば、ユーザー情報を取り出したいときにこんなふうに書けます。

python
from sqlalchemy.orm import Session

users = session.query(User).filter(User.age > 20).all()

長年使われていて機能も豊富、Pythonでデータベースを扱うときの定番ライブラリです。

じゃあSQLModelは?

SQLModelは、わりと最近(2021年頃)登場したライブラリです。FastAPIを作った人(Sebastián Ramírez氏)が開発していて、SQLAlchemyとPydanticの「いいとこ取り」をしたのが特徴です。

  • SQLAlchemy → データベース操作が得意
  • Pydantic → データのバリデーション(検証)が得意
  • SQLModel → 両方の機能をまとめて使える!

書き方はこんな感じ。

python
from sqlmodel import SQLModel, Field

class User(SQLModel, table=True):
    id: int = Field(primary_key=True)
    name: str
    age: int

型ヒント(intstr)を書くだけで、データベースのテーブル定義もデータ検証も同時にできちゃいます。

結局、何が違うの?

ポイントを表でまとめます。

項目SQLAlchemySQLModel
登場時期古くからある定番2021年〜の新しめ
書きやすさやや複雑シンプル
バリデーション別ライブラリが必要標準で対応
FastAPIとの相性普通バツグン
情報量とても多いまだ少なめ

どっちを使えばいい?

ざっくりこんな感じで選べばOKです。

  • FastAPIで小〜中規模のアプリを作るSQLModelがラク
  • 複雑な処理や大規模なシステムSQLAlchemyが安心
  • ネットの情報を頼りに学びたい → 情報の多いSQLAlchemy

まとめ

SQLModelは、SQLAlchemyを「もっと簡単に書けるようにしたもの」と思っておけば大丈夫!初心者でFastAPIを使うなら、まずはSQLModelから入るのがおすすめです。慣れてきたらSQLAlchemyの細かい機能も触ってみてください。

ぜひ自分のプロジェクトで試してみてくださいね!