Pydantic は、Python 用のデータ検証および設定管理ライブラリです。 Python の型ヒントを使用してデータを検証および解析し、コードが適切に構造化され型指定されたデータを処理できるようにします。 Pydantic では、Python のデータクラスに似たモデル構造を活用することで、複雑なデータのスキーマを簡単に定義し、きれいな Python 的な方法でデータを自動的に検証し、シリアル化/逆シリアル化することができます。主な機能を見てみましょう:
Python の型ヒントを使用して、スキーマに対して入力データを自動的に検証します。
from pydantic import BaseModel, ValidationError class User(BaseModel): id: int name: str email: str # Valid input user = User(id=1, name="John Doe", email="john@example.com") print(user) # Invalid input try: user = User(id="not-an-integer", name="Jane", email="jane@example.com") except ValidationError as err: print(err)
データ モデルを定義したい場合は、pydantic.BaseModel を使用してください!
Pydantic は、データ モデルだけでなく、関数の入出力も検証するための強力なツールを提供します。これは @validate_call デコレーターを使用して実現され、関数の引数と戻り値に対して厳密なデータ検証を強制できるようになります。指定された引数または戻り値の型が予期される型と一致しない場合、ValidationError が発生します。
from pydantic import validate_call @validate_call def greet(name: str, age: int) -> str: return f"Hello {name}, you are {age} years old." # Valid input print(greet("Alice", 30)) # Output: Hello Alice, you are 30 years old. # Invalid input try: greet("Bob", "not-a-number") except Exception as e: print(e)
@validate_call で validate_return フラグを有効にすることにより、Pydantic は注釈付きの戻り値の型に対して関数の戻り値も検証します。これにより、関数が期待される出力スキーマに準拠することが保証されます。
from pydantic import validate_call @validate_call(validate_return=True) def calculate_square(number: int) -> int: return number ** 2 # Correct return type # Valid input and return print(calculate_square(4)) # Output: 16 # Invalid return value @validate_call(validate_return=True) def broken_square(number: int) -> int: return str(number ** 2) # Incorrect return type try: broken_square(4) except Exception as e: print(e)
Pydantic は、JSON データを含む複雑な入れ子構造をモデル オブジェクトに解析できます。
from pydantic import BaseModel from typing import List class Item(BaseModel): name: str price: float class Order(BaseModel): items: List[Item] total: float # JSON-like data data = { "items": [ {"name": "Apple", "price": 1.2}, {"name": "Banana", "price": 0.8} ], "total": 2.0 } order = Order(**data) print(order) # items=[Item(name='Apple', price=1.2), Item(name='Banana', price=0.8)] total=2.0
Pydantic モデルは JSON または辞書にシリアル化し、再構築できます。
from pydantic import BaseModel class User(BaseModel): id: int name: str email: str # Create a model instance user = User(id=1, name="Alice", email="alice@example.com") # Serialize to dictionary and JSON user_dict = user.model_dump() user_json = user.model_dump(mode='json') print("Dictionary:", user_dict) print("JSON:", user_json) # Deserialize back to the model new_user = User.model_validate(user_json) print("Parsed User:", new_user)
データ検証は強制型検証ではありません。たとえば、それぞれ int、bool、datetime 型の id、due_date、priority フィールドを使用してモデルを定義する場合、次のように渡すことができます。
from sensei import APIModel from datetime import datetime class Task(APIModel): id: int due_date: datetime priority: bool task = Task(due_date='2024-10-15T15:30:00',> <p>The result will be<br> </p> <pre class="brush:php;toolbar:false">Task(id=1, due_date=datetime.datetime(2024, 10, 15, 15, 30), priority=True)
バリデーターを使用してモデル内にカスタム検証ロジックを定義することもできます。これらを使用すると、組み込み型やフィールド制約を使用して簡単に表現できない、より複雑な検証ルールを適用できます。バリデータは、field_validator デコレータまたは Field オブジェクトを通じて定義されます。 1 つ以上のフィールド名を field_validator に渡して、どのフィールドがこのバリデータを使用するかを決定するか、「*」を渡してすべてのフィールドにバリデータを適用できます。
import Any と入力してから pydantic import フィールド、field_validator、EmailStr、BaseModel から クラス ユーザー(ベースモデル): ID: 整数 ユーザー名: str = フィールド(パターン=r'^w $') 電子メール: EmailStr 年齢: int = フィールド(18, ge=14) is_active: bool = True 役割: リスト[str] # 内部解析の「前」に実行されるバリデータを定義します @field_validator('役割', モード='前') def _validate_roles(cls、値: 任意): 戻り値.split(',') if isinstance(value, str) else value ユーザー = ユーザー(id=1、ユーザー名='john'、電子メール='john@example.com'、役割='学生、歌手') プリント(ユーザー) #> <h2> オープンソース プロジェクト </h2> <p>Pydantic を利用したオープンソース プロジェクトが多数あります。それらの最高のものを探ってみましょう:</p> <h3> ファストAPI </h3> <p>Pydantic の最も顕著な使用例の 1 つは、Python で API を構築するための最新の Web フレームワークである FastAPI です。 FastAPI は、リクエスト本文の検証、クエリ パラメータ、レスポンス スキーマに Pydantic モデルを広範囲に使用します。</p>
FastAPI は API を構築するように設計されていますが、Sensei はこれらの API を迅速かつ簡単にラップするように設計されています。 Teacher を活用した API クライアントにより、ユーザーは関連性の高いデータ モデルを確実に取得でき、混乱を招くエラーが発生しません。
SQLModel と Typer は、FastAPI の作成者である Sebastián Ramírez によって開発された 2 つの注目すべきプロジェクトです。
SQLModel は、Python アプリケーションでのデータベース対話を合理化するために設計されたライブラリです。 SQLAlchemy と Pydantic の上に構築された SQLModel は、ORM の能力とデータ検証とシリアル化の利便性を組み合わせています。
Typer は、Python を使用してコマンドライン インターフェイス (CLI) アプリケーションを作成するためのフレームワークです。 Python のタイプヒントを使用して、ユーザーフレンドリーな CLI コマンドとヘルプ テキストを自動的に生成することで、プロセスを簡素化します。
以上がPydantic: 手動検証の終わり! ✨の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。