PyCon JP 2024

SQLModel入門 〜クエリと型〜
2024-09-28 , 20F Track1

ここ数年PythonのWeb開発において目立つ存在になっているFastAPIについて、FastAPI開発者が提供するサンプルのリポジトリでは、データ操作のためのパッケージとしてSQLModelというORMが使われています。

クラス定義はPydantic、クエリはSQLAlchemyをベースとしているSQLModelは直感的で使いやすいですが、それゆえに使い方のノウハウが少ないように思えます。

このトークでは、SQLModelの基本的な使い方を話しながらPydantic/SQLAlchemyとの違いにも触れていきます。

構成

  • SQLモデルでのモデルクラスの書き方

  • クエリの書き方

  • 静的解析ツールの設定方法

  • alembicを使ったデータベースのスキーマの変更管理

  • FastAPIのアプリ内での使い方

対象者

  • Djangoなど別のORMを使ったことがあるが、SQLModelには馴染みのない方

話さないこと

  • SQLの基本的な構文(SELCT, INSERT, JOINなど)
  • 素のPythonでの型ヒントの基本的な構文
  • 複数DBに接続する場合など応用的な使い方

「SQLモデルでのモデルクラスの書き方」では下記を話します。
* 基本的な型定義(int, strなど)
* Fieldクラスのオプション(default, primary_key, indexなど)
* 外部キー接続のある項目の型定義
* One to Many
* Many to Many
* SQLAlchemyでの定義の方法との比較(よしあしではなく、単純な構文の違いとして)

「クエリの書き方」では下記を話します。
* SELECT
* JOIN
* 集計関数
* INSERT
* UPDATE
* DELETE
* SQL文の確認方法
* クエリの返り値の型ヒントの付け方

「FastAPIのアプリ内での使い方」では下記を話します。
* FastAPI開発者が提供するサンプルのリポジトリのユーザーを作成するAPI、ユーザーを取得するAPIのリクエストが送られてからDBにアクセスし、レスポンスを返すまでの流れを解説


Why did you choose this topic?

SQLModelを使って直感的でとても良いなと思ったのですが、SQLModelの使いやすさとPydantic/SQLAlchemyをベースにしておりその知識を使って書けるためか、SQLModelについてまとまった知見があまり見つからなかったためです。

Knowledges and know-how the audience can get from your talk
  • 網羅的なSQLModelの知識
    • SQLModelでのモデルの定義の仕方
    • SQLModelでクエリを実行する方法
Prior knowledges speakers assume the audience to have
  • SQLの基本的な知識(CREATE TABLE文、CRUDの基本的な構文)
  • Pythonの型ヒントに関する基本的な知識
Audience experiment

Intermediate

Language of presentation

日本語

Language of presentation material

日本語

See also: 発表スライド

PythonでWeb開発をするのが好きです。Djangoの経験が多めです。FastAPIも好きです。

最近はアーキテクト的な仕事をする傍ら、所属会社の若手エンジニア育成プロジェクトの進行・教育教材の作成をしています。