SQLModel
SQLModelは、シンプルさ、互換性、堅牢性を重視して設計された、PythonでSQLデータベースを扱うためのライブラリです。
ドキュメント: https://sqlmodel.dokyumento.jp
ソースコード: https://github.com/tiangolo/sqlmodel
SQLModelは、Pythonオブジェクトを使用して、PythonコードからSQLデータベースと対話するためのライブラリです。直感的で使いやすく、互換性が高く、堅牢であるように設計されています。
SQLModelは、Pythonの型アノテーションに基づいており、PydanticとSQLAlchemyによって駆動されています。
主な機能は以下のとおりです。
- 直感的な記述: 優れたエディタサポート。補完がどこでも利用できます。デバッグ時間を短縮します。使いやすく、習得しやすいように設計されています。ドキュメントを読む時間を短縮します。
- 使いやすさ: 賢明なデフォルト値が設定されており、記述するコードを簡素化するために多くの作業をバックグラウンドで行います。
- 互換性: FastAPI、Pydantic、SQLAlchemyとの互換性を考慮して設計されています。
- 拡張性: SQLAlchemyとPydanticのすべての機能を基盤として利用できます。
- 簡潔さ: コードの重複を最小限に抑えます。1つの型アノテーションで多くの作業を実行します。SQLAlchemyとPydanticでモデルを複製する必要はありません。
スポンサー¶
FastAPIにおけるSQLデータベース¶
SQLModelは、FastAPIアプリケーションでSQLデータベースとの対話を簡素化するために設計されており、同じ作者によって作成されました。 😁
SQLAlchemyとPydanticを組み合わせ、記述するコードを可能な限り簡素化し、コードの重複を最小限に抑えながら、可能な限り最高の開発エクスペリエンスを実現します。
SQLModelは、実際には、PydanticとSQLAlchemyの上に構築された薄い層であり、両方と互換性を持つように慎重に設計されています。
要件¶
現在サポートされている最新のPythonバージョン。
SQLModelは、PydanticとSQLAlchemyに基づいているため、これらが必要です。SQLModelをインストールすると、自動的にインストールされます。
インストール¶
$ pip install sqlmodel
---> 100%
Successfully installed sqlmodel
例¶
データベース、SQL、その他のすべてについての入門については、SQLModelドキュメントを参照してください。
簡単な例を次に示します。 ✨
SQLテーブル¶
hero
という名前のSQLテーブルがあり、以下の列があるとします。
id
name
secret_name
age
そして、以下のデータを持つようにしたいとします。
id | name | secret_name | age |
---|---|---|---|
1 | Deadpond | Dive Wilson | null |
2 | Spider-Boy | Pedro Parqueador | null |
3 | Rusty-Man | Tommy Sharp | 48 |
48
SQLModelモデルの作成¶
from typing import Optional
from sqlmodel import Field, SQLModel
class Hero(SQLModel, table=True):
id: Optional[int] = Field(default=None, primary_key=True)
name: str
secret_name: str
age: Optional[int] = None
次に、次のようにSQLModelモデルを作成できます。
このHero
クラスは、SQLModelモデルであり、PythonコードにおけるSQLテーブルに相当します。
そして、これらの各クラス属性は、各テーブル列に相当します。
行の作成¶
hero_1 = Hero(name="Deadpond", secret_name="Dive Wilson")
hero_2 = Hero(name="Spider-Boy", secret_name="Pedro Parqueador")
hero_3 = Hero(name="Rusty-Man", secret_name="Tommy Sharp", age=48)
次に、テーブルの各行をモデルのインスタンスとして作成できます。
このように、テーブルと行を表す、クラスとインスタンスを使った従来のPythonコードを使用して、SQLデータベースと通信できます。
エディタサポート¶
すべては、最高のエディタサポートにより、可能な限り最高の開発エクスペリエンスを得られるように設計されています。
自動補完を含みます。
そして、インラインエラーも含まれます。
データベースへの書き込み¶
from typing import Optional
from sqlmodel import Field, Session, SQLModel, create_engine
class Hero(SQLModel, table=True):
id: Optional[int] = Field(default=None, primary_key=True)
name: str
secret_name: str
age: Optional[int] = None
hero_1 = Hero(name="Deadpond", secret_name="Dive Wilson")
hero_2 = Hero(name="Spider-Boy", secret_name="Pedro Parqueador")
hero_3 = Hero(name="Rusty-Man", secret_name="Tommy Sharp", age=48)
engine = create_engine("sqlite:///database.db")
SQLModel.metadata.create_all(engine)
with Session(engine) as session:
session.add(hero_1)
session.add(hero_2)
session.add(hero_3)
session.commit()
チュートリアルを簡単に mengikuti することで、SQLModelについてさらに詳しく学ぶことができますが、今すぐすべてをまとめてデータベースに保存する方法を知りたい場合は、次のようにします。
これにより、3人のヒーローを持つSQLiteデータベースが保存されます。
データベースからの選択¶
from typing import Optional
from sqlmodel import Field, Session, SQLModel, create_engine, select
class Hero(SQLModel, table=True):
id: Optional[int] = Field(default=None, primary_key=True)
name: str
secret_name: str
age: Optional[int] = None
engine = create_engine("sqlite:///database.db")
with Session(engine) as session:
statement = select(Hero).where(Hero.name == "Spider-Boy")
hero = session.exec(statement).first()
print(hero)
次に、同じデータベースから選択するためのクエリを記述できます。たとえば、次のようにします。
あらゆる場所でのエディタサポート¶
SQLModelは、データベースからデータを選択した後でも、最高の開発エクスペリエンスとエディタサポートを提供するように注意深く設計されています。
SQLAlchemyとPydantic¶
このHero
クラスは、SQLModelモデルです。
しかし同時に、✨ これはSQLAlchemyモデルでもあります ✨。そのため、他のSQLAlchemyモデルと組み合わせて使用したり、SQLAlchemyを使用するアプリケーションをSQLModelに簡単に移行したりできます。
そして同時に、✨ これはPydanticモデルでもあります ✨。継承を使用してすべてのデータモデルを定義し、コードの重複を回避できます。これにより、FastAPIで非常に使いやすくなります。
ライセンス¶