sqlmodel - シンプルさ、互換性、堅牢性を考慮して設計された Python の SQL データベース。

(SQL databases in Python, designed for simplicity, compatibility, and robustness.)

Created at: 2021-08-24 22:26:53
Language: Python
License: MIT

SQLモデル

シンプルさ、互換性、および堅牢性のために設計された Python の SQL データベースである SQLModel。

テスト 公開 カバレッジ パッケージ版


ドキュメンテーション:https://sqlmodel.tiangolo.com

ソースコード:https://github.com/tiangolo/sqlmodel


SQLModel は、Python オブジェクトを使用して、Python コードから SQL データベースと対話するためのライブラリです。直感的で使いやすく、互換性が高く、堅牢であるように設計されています。

SQLModelは Python の型注釈に基づいており、PydanticSQLAlchemyを利用しています。

主な機能は次のとおりです。

  • 直感的に書ける: 優れたエディター サポート。ところどころ完成。デバッグ時間の短縮。使いやすく、学習しやすいように設計されています。ドキュメントを読む時間が減りました。
  • 使いやすい: 賢明なデフォルトがあり、その下で多くの作業を行って、記述するコードを簡素化します。
  • 互換性: FastAPI、Pydantic、および SQLAlchemy と互換性があるように設計されています。
  • 拡張可能: SQLAlchemy と Pydantic のすべての機能を利用できます。
  • Short : コードの重複を最小限に抑えます。単一の型注釈で多くの作業が行われます。SQLAlchemy と Pydantic でモデルを複製する必要はありません。

FastAPI の SQL データベース

SQLModelは、 FastAPIアプリケーションでの SQL データベースとのやり取りを簡素化するように設計されており、同じ作成によって作成されました。😁

SQLAlchemy と Pydantic を組み合わせて、作成するコードを可能な限り単純化しようとするため、コードの重複を最小限に抑えながら、可能な限り最高の開発者エクスペリエンスを得ることができます。

実際、 SQLModelはPydanticSQLAlchemyの上にある薄いレイヤーであり、両方と互換性があるように慎重に設計されています。

要件

Python の最新かつ現在サポートされているバージョン (現在、Python はバージョン 3.6 以降をサポートしています)。

SQLModelはPydanticSQLAlchemyに基づいているため、それらが必要です。これらは、SQLModel をインストールするときに自動的にインストールされます。

インストール

$ pip install sqlmodel
---> 100%
Successfully installed sqlmodel

データベース、SQL、その他すべての概要については、SQLModel のドキュメントを参照してください。

簡単な例を次に示します。

SQL テーブル

次のように呼び出される SQL テーブルがあると

hero
します。

  • id
  • name
  • secret_name
  • age

そして、次のデータが必要です。

ID 名前 secret_name
1 デッドポンド ダイブ・ウィルソン ヌル
2 スパイダーボーイ ペドロ・パルケアドール ヌル
3 ラスティマン トミー・シャープ 48

SQLModel モデルを作成する

次に、次のような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は、データベースからデータを選択した後でも、最高の開発者エクスペリエンスとエディター サポートを提供するように慎重に設計されています。

SQLAlchemy と Pydantic

そのクラス

Hero
SQLModelモデルです。

しかし同時に、それはSQLAlchemyモデルです. したがって、それを組み合わせて他の SQLAlchemy モデルと使用することも、SQLAlchemy を使用するアプリケーションをSQLModelに簡単に移行することもできます。

そして同時に、それはピダンティックモデルでもあります. 継承を使用して、コードの重複を回避しながらすべてのデータ モデルを定義できます。これにより、FastAPIでの使用が非常に簡単になります。

ライセンス

このプロジェクトは、MIT ライセンスの条項に基づいてライセンスされています。