SQLModel は、シンプルさ、互換性、堅牢性を目的に設計された Python の SQL データベースです。
ドキュメント: https://sqlmodel.tiangolo.com
ソースコード: https://github.com/fastapi/sqlmodel
SQLModel は、Python コードから Python オブジェクトを使用して SQL データベースと対話するためのライブラリです。直感的で使いやすく、互換性が高く、堅牢であるように設計されています。
SQLModel はPython 型の注釈に基づいており、Pydantic と SQLAlchemy を利用しています。
主な機能は次のとおりです。
SQLModelは、FastAPI アプリケーションでの SQL データベースとの対話を簡素化するように設計されており、同じ作成者によって作成されました。 ?
SQLAlchemy と Pydantic を組み合わせて、作成するコードを可能な限り単純化して、コードの重複を最小限に抑えながら、可能な限り最高の開発者エクスペリエンスを実現します。
実際、 SQLModelはPydanticとSQLAlchemyの上にある薄い層であり、両方と互換性があるように慎重に設計されています。
現在サポートされている最新の Python バージョン。
SQLModel はPydanticとSQLAlchemyに基づいているため、それらが必要です。これらは SQLModel をインストールするときに自動的にインストールされます。
たとえば次のようにして、必ず仮想環境を作成し、アクティブ化してから SQLModel をインストールしてください。
$ pip install sqlmodel
---> 100%
Successfully installed sqlmodel
データベース、SQL、その他すべての概要については、SQLModel のドキュメントを参照してください。
ここに簡単な例を示します。
以下を含むhero
という SQL テーブルがあると想像してください。
id
name
secret_name
age
そして、次のデータを持たせたいとします。
ID | 名前 | 秘密の名前 | 年 |
---|---|---|---|
1 | デッドポンド | ダイブ・ウィルソン | ヌル |
2 | スパイダーボーイ | ペドロ・パルケアドール | ヌル |
3 | 錆びた男 | トミー・シャープ | 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
そのクラス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 データベースと通信することができます。
すべては、最高のエディター サポートとともに、可能な限り最高の開発者エクスペリエンスを得ることができるように設計されています。
オートコンプリートを含む:
そしてインラインエラー:
チュートリアルに簡単に従うことで、 SQLModelについてさらに詳しく学ぶことができますが、すべてをまとめてデータベースに保存する方法を今すぐ試したい場合は、次のようにすることができます。
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 ()
これにより、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 は、データベースからデータを選択した後でも、最高の開発者エクスペリエンスとエディター サポートを提供できるように慎重に設計されています。
そのクラスHero
SQLModelモデルです。
しかし同時に、これはSQLAlchemyモデルでもあります。したがって、これを他の SQLAlchemy モデルと組み合わせて使用したり、 SQLAlchemy を使用するアプリケーションをSQLModelに簡単に移行したりできます。
そして同時に、それはPydanticモデルでもあります。継承を使用すると、コードの重複を避けながらすべてのデータ モデルを定義できます。これにより、 FastAPIを非常に簡単に使用できるようになります。
このプロジェクトは、MIT ライセンスの条件に基づいてライセンスされています。