FastAPIのチュートリアルを見て試したりしているのですが、今までmodels(モデル)にSQLAlchemy用のコードを書いて、schemas(スキーマ)にPydantic用のコードを書いていました。
イメージとしては、modelsはDBそのものでschemasはDBの型の定義をしているイメージです。
前から気になっていたのですが、このmodelsとschemasはざっくり同じようなDB構造をコーディングしなければならないのが煩わしいと思っていました。(カラムを追加すると両方追加する必要がある。)
そこでふと調べてみると、FastAPIの開発者の方が、SQLModelというORMを開発中ということが分かりました。どうやら開発者の方も同じように感じてくださってるようです。
そこで今回はこのSQLModelというORMについて簡単にまとめてみました。まさにFastAPIのために作られたようなORMなのでFastAPIを使われている方にはうってつけです。
SQLModelとは?
SQLModelとは、FastAPIと同じ開発者が開発しているPythonからSQLを操作するためのライブラリです。一般的にはSQLを操作するライブラリは、ORM(ORマッパー)と呼ばれています。
FastAPIを使っている人にとっては、お馴染みの型ヒントによる型チェックを行ってくれるPydanticとSQLを操作するORMライブラリSQLAlchemyを組み合わせたライブラリです。
SQLModelの特徴
SQLModelの特徴は、
- SQLAlchemyとPydanticをベースに開発されている。
- SQLAlchemyとPydanticを組み合わせたライブラリなので可能な限り単純化していて重複したコードを書かなくてよい。
- FastAPIの開発者が開発しているため正にFastAPIのためのORMみたいな位置づけ
冒頭にも書きましたが、modelsとschemasでしたようなコードを書く不便さがあったので、開発者が要望に応えてくれているのだと思っています。
まだ、バリバリ開発途中みたいなので仕様が大きく変わる可能性があると思いますがFastAPIのフレームワークを使う人にとっては開発者が同じということもあってサポートされないなどの問題が発生することはほぼないと思います。
SQLModelのインストール
SQLModelのインストールは以下のコマンドインストールされます。
pip install sqlmodel
私がインストールした段階ではバージョンが0.0.8になっていました。sqlmodelをインストールすると一緒にSQLAlchemyとPydanticも一緒にインストールされます。
SQLModelの恩恵
FastAPIのようにPydanticでの型チェックとSQLAlchemyをORMとして利用している場合などは、sqlalchemy用のmodelsコードとPydantic用のschemasコードに似たような重複したコードを書く必要がなくなります。
FastAPIをフレームワークとして採用している場合はまさにぴったりのORMだと思います。
ただし、メージャーバージョンが0.となっているのでまだ開発初期段階を意味しているように思います。なので大幅な仕様変更などには注意が必要です。
まとめ
私もFastAPI x SQLModelで使ってみましたが、わざわざmodelsとschemasに分ける必要がなく一つのファイルにDBの定義を記述できるのでめちゃくちゃ便利だと思いました。FastAPIをフレームワークとして採用するのであればSQLModelが一番使いやすいと思います。
開発初期段階という不安要素はありますがFastAPIの開発者が開発しているので安心かなと思います。
はやくバージョン1.がリリースされることを願っています。
コメント
フォント周りをふつうのデザインにしてください。よみづらすぎます
ご指摘ありがとうございます。
フォント回りを見直してみました。
またご意見等がありましたら是非お願いします。