コンテンツにスキップ

ピダンティック

CI Coverage
pypi CondaForge downloads
license

Pydantic は、Python で最も広く使用されているデータ検証ライブラリです。

高速で拡張可能な Pydantic は、リンター/IDE/ブレインとうまく連携します。純粋な正規の Python 3.8 以降でのデータのあり方を定義します。 Pydantic で検証します。

!!!成功 「Pydantic V2 への移行」 Pydantic V1 を使用しますか?アプリケーションで Pydantic V2 にアップグレードする場合の注意事項については、移行ガイドを参照してください。

from datetime import datetime
from typing import Tuple

from pydantic import BaseModel


class Delivery(BaseModel):
    timestamp: datetime
    dimensions: Tuple[int, int]


m = Delivery(timestamp='2020-01-02T03:04:05Z', dimensions=['10', '20'])
print(repr(m.timestamp))
#> datetime.datetime(2020, 1, 2, 3, 4, 5, tzinfo=TzInfo(UTC))
print(m.dimensions)
#> (10, 20)

!!!質問「なぜ Pydantic はそのような名前になったのですか?」

The name "Pydantic" is a portmanteau of "Py" and "pedantic." The "Py" part indicates that the library is associated with Python, and
"pedantic" refers to the library's meticulous approach to data validation and type enforcement.

Combining these elements, "Pydantic" describes our Python library that provides detail-oriented, rigorous data validation.

We’re aware of the irony that Pydantic V1 was not strict in its validation, so if we're being pedantic, "Pydantic" was a misnomer until V2 😉.

Pydantic を使用する理由

  • 型ヒントを活用 — Pydantic では、スキーマの検証とシリアル化は型アノテーションによって制御されます。学習する必要が少なく、記述するコードも少なく、IDE および静的分析ツールと統合されています。もっと詳しく知る…
  • 速度 — Pydantic のコア検証ロジックは Rust で書かれています。その結果、Pydantic は Python 用の最も高速なデータ検証ライブラリの 1 つとなります。もっと詳しく知る…
  • JSON スキーマ — Pydantic モデルは JSON スキーマを出力できるため、他のツールと簡単に統合できます。もっと詳しく知る…
  • Strict および Lax モード — Pydantic は strict=True モード (データが変換されない) または strict=False モードで実行でき、Pydantic は必要に応じてデータを正しい型に強制しようとします。もっと詳しく知る…
  • データクラス、TypedDict など — Pydantic は、データクラスや TypedDict を含む多くの標準ライブラリ タイプの検証をサポートしています。もっと詳しく知る…
  • カスタマイズ — Pydantic を使用すると、カスタム バリデーターとシリアライザーでデータの処理方法を多くの強力な方法で変更できます。もっと詳しく知る…
  • エコシステム — PyPI 上の約 8,000 のパッケージが Pydantic を使用しており、これには次のような非常に人気のあるライブラリが含まれます。 FastAPI、huggingface、Django Ninja、SQLModel、LangChain。もっと詳しく知る…
  • 実戦テスト済み — Pydantic は月間 7,000 万回以上ダウンロードされ、すべての FAANG 企業と NASDAQ の最大手企業 25 社のうち 20 社によって使用されています。 Pydantic で何かを行おうとしている場合、おそらく他の誰かがすでにそれを行っているでしょう。もっと詳しく知る…

Pydantic のインストールは次のように簡単です: pip install pydantic

ピダンティックな例

Pydantic の動作を確認するために、BaseModel から継承するカスタム クラスを作成する簡単な例から始めましょう。

from datetime import datetime

from pydantic import BaseModel, PositiveInt


class User(BaseModel):
    id: int  # (1)!
    name: str = 'John Doe'  # (2)!
    signup_ts: datetime | None  # (3)!
    tastes: dict[str, PositiveInt]  # (4)!


external_data = {
    'id': 123,
    'signup_ts': '2019-06-01 12:22',  # (5)!
    'tastes': {
        'wine': 9,
        b'cheese': 7,  # (6)!
        'cabbage': '1',  # (7)!
    },
}

user = User(**external_data)  # (8)!

print(user.id)  # (9)!
#> 123
print(user.model_dump())  # (10)!
"""
{
    'id': 123,
    'name': 'John Doe',
    'signup_ts': datetime.datetime(2019, 6, 1, 12, 22),
    'tastes': {'wine': 9, 'cheese': 7, 'cabbage': 1},
}
"""
  1. id は int 型です。アノテーションのみの宣言は、このフィールドが必須であることを Pydantic に伝えます。可能であれば、文字列、バイト、または浮動小数点数は強制的に int に変換されます。それ以外の場合は例外が発生します。
  2. 名前は文字列です。デフォルトがあるため、必須ではありません。
  3. Signup_ts は必須の日時フィールドですが、値 None を指定することもできます。 Pydantic は、UNIX タイムスタンプ int (例: 1496498400) または日付と時刻を表す文字列のいずれかを処理します。
  4. 味は文字列キーと正の整数値を持つ辞書です。 PositiveInt 型は次の短縮形です。 Annotated[int, annotated_types.Gt(0)]
  5. ここでの入力は ISO8601 形式の日時であり、Pydantic はそれを日時オブジェクトに変換します。
  6. ここで重要なのはバイトですが、Pydantic はそれを文字列に強制変換します。
  7. 同様に、Pydantic は文字列「1」を整数 1 に強制変換します。
  8. ここでは、外部データをキーワード引数として User に渡して、User のインスタンスを作成します。
  9. モデルの属性としてフィールドにアクセスできます
  10. model_dump() を使用してモデルを辞書に変換できます。

検証が失敗した場合、Pydantic は何が問題だったかの内訳を示すエラーを生成します。

# continuing the above example...

from pydantic import ValidationError


class User(BaseModel):
    id: int
    name: str = 'John Doe'
    signup_ts: datetime | None
    tastes: dict[str, PositiveInt]


external_data = {'id': 'not an int', 'tastes': {}}  # (1)!

try:
    User(**external_data)  # (2)!
except ValidationError as e:
    print(e.errors())
    """
    [
        {
            'type': 'int_parsing',
            'loc': ('id',),
            'msg': 'Input should be a valid integer, unable to parse string as an integer',
            'input': 'not an int',
            'url': 'https://errors.pydantic.dev/2/v/int_parsing',
        },
        {
            'type': 'missing',
            'loc': ('signup_ts',),
            'msg': 'Field required',
            'input': {'id': 'not an int', 'tastes': {}},
            'url': 'https://errors.pydantic.dev/2/v/missing',
        },
    ]
    """
  1. ここの入力データは間違っています — id は有効な整数ではなく、signup_ts がありません
  2. User(...) はエラーのリストを含む ValidationError を発生させます

Pydantic を使用しているのは誰ですか?

何百もの組織とパッケージが Pydantic を使用しています。 Pydantic を使用している世界中の著名な企業や組織には次のようなものがあります。

Pydantic を使用するオープンソース プロジェクトのより包括的なリストについては、以下を参照してください。 github の依存関係のリストを参照するか、awesome-pydantic で Pydantic を使用した素晴らしいプロジェクトを見つけることができます。


本文总阅读量