Pydanticによるデータ検証

目次

Pydanticの概要

Pydanticは、Pythonのデータ検証と設定管理ライブラリで、複雑なデータ型をエレガントに扱うことで、その強力な型ヒントとバリデーション機能により、多くのPython開発者から支持を受けているライブラリです。

Pydanticを使用することのメリットは、

  1. データの不整合や予期せぬエラーを効率的に排除することが可能になり、より堅牢なWebアプリケーションを構築することが可能になる
  2. 手間のかかる設定や冗長なコードを大幅に削減し、開発者が本質的な部分に集中できる。

という部分が挙げられます。

Pydanticの使いどころ

APIリクエストとレスポンスのデータを管理

Pydanticの機能を活用して、APIリクエストとレスポンスのデータを管理します。これにより、エンドポイントに送信されるデータが正しい形式と構造を持っていることを保証します。

PydanticのDBモデル

特定のデータ構造を定義し、そのデータが適切に検証され、型変換されることを保証します。

Pydanticのバリデーション

データが定義した型と形式に一致することを保証します。

Pydanticのバリデーション設定例

項目必須チェックの例

必須チェックはPydanticのモデルで自動的に適用されます。フィールドがモデルで指定されている場合、そのフィールドは必須になります。

from pydantic import BaseModel

class User(BaseModel):
    name: str
    age: int

この例では、nameageは必須フィールドです。もしこれらが省略された場合、Pydanticはエラーを発生させます。

項目必須チェックと最小文字数、最大文字数

フィールドの長さの制限は、Field関数を使用して指定します。

from pydantic import BaseModel, Field

class User(BaseModel):
    name: str = Field(..., min_length=2, max_length=10)

この例では、nameは2文字以上10文字以下でなければならないと指定しています。

項目の指定を任意にする場合

フィールドが存在しなくてもよい場合はNoneを指定します。

from pydantic import BaseModel

class User(BaseModel):
    name: str = None

この例では、nameはなくてもエラーになりません。 以下の記述方式も同じ効果となります。

    name: str | None

項目必須だが値は指定なしを許可する場合

必須でないフィールドは、Optionalをデフォルト値を指定することで実現します。

PythonのtypingモジュールにあるOptionalは、値が存在しないこと(Noneであること)を許可する場合に使用します。Pydanticのモデルにおいても、OptionalはフィールドがNoneであることを許可するために利用できます。

from pydantic import BaseModel
from typing import Optional

class User(BaseModel):
    name: Optional[str] = Field(...)

この例では、nameを指定しない場合はエラーになる、空文字の場合はエラーになりません。

項目指定されている場合のみ文字数の制限する

これもField関数を使用して実現できます。

from pydantic import BaseModel, Field

class User(BaseModel):
    name: str = Field(default=None, min_length=2, max_length=10)

この例では、nameは指定されている場合のみ2文字以上10文字以下でなければならないと指定しています。

正規表現を使う場合

Field関数のregexパラメータに正規表現を指定します。

from pydantic import BaseModel, Field

class User(BaseModel):
    email: str = Field(..., regex=r'^[a-z0-9]+[\._]?[a-z0-9]+[@]\w+[.]\w{2,3}$')

この例では、emailは正規表現によるフォーマットチェックが行われます。

以上が、Pydanticを用いたデータバリデーションの基本的な例です。それぞれの例は具体的な制限を示していますが、Pydanticはこれらを自由に組み合わせて使用することができます。

よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!

コメント

コメントする

目次