0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

Pydanticについて学んだこと

0
Posted at

:mag: pydanticとは

pythonの型ヒントを利用して、データ構造の定義の検証、変換を自動で行うためのライブラリのことです。
主にFastAPIとの相性が良く、FastAPIで使用されることが多いですが、単体でも非常に便利に使えます。

以下のような特徴があります⇓

  • Python の型ヒントを使ってデータ構造を定義できる
  • 入力データを自動的に検証・変換してくれる
  • エラー内容がわかりやすい
  • 辞書 ⇔ モデル の相互変換が簡単

例えば、整数を期待しているフィールドであれば、文字列の"1"が入力されたとき、自動で整数型に変換する、といった変換を施してくれます。

これらの特徴から、PydanticはPythonのコードをより安全に、堅牢にするために使用されます。

基本的な使用方法

実際にpythonコード内で使用する際は以下のようにコードを書きます⇓

モデル定義と自動バリデーション

qiita.rb
from pydantic import BaseModel

class User(BaseModel):
    id: int
    name: str
    is_active: bool = True

data = {"id": "1", "name": "Taro"}
user = User(**data)

print(user)
# id=1 name='Taro' is_active=True

idに文字列"1"を渡しても、pydanticが自動でintに変換してくれます。

:pencil: メモ:BaseModelとは
BaseModel(Pydantic)は、型ヒントに基づくデータモデルを宣言し、入力データの検証・変換・シリアライズを自動で行うための基底クラスです。

:x: バリデーションエラーの例
いくら万能とはいえ、アルファベットなどが来た場合は変換の仕様がありません。
そのため、以下のようなバリデーションエラーを出します。

quiita.rb
User(id="abc", name="Taro")
ValidationError: 1 validation error for User
id
  Input should be a valid integer (type=int_type)

このようにエラーが読みやすいことも特徴の一つです。

:left_right_arrow: dictやJSONとの相互変換

qiita.rb
user = User(id=1, name="Taro")
print(user.model_dump())
# {'id': 1, 'name': 'Taro', 'is_active': True}

print(user.model_dump_json())
# {"id": 1, "name": "Taro", "is_active": true}
``

前提

  • Userはpydanticのモデル
  • is_activeはデフォルトTrueが設定されているため、コンストラクタで値を渡さなくても自動的にTrueが入ります。

それぞれの出力の意味

  1. model_dump()
    • Python の辞書(dict) を返します。
    • 出力例:{'id': 1, 'name': 'Taro', 'is_active': True}
    • 用途:後続の Python 内処理(辞書として扱う、他関数へ渡す、テスト比較 など)。
    • 型:bool は Python の True/False。
  2. model_dump_json()
    • JSON 文字列(str) を返します。
    • 出力例:'{"id": 1, "name": "Taro", "is_active": true}'
    • 用途:HTTP レスポンスやファイル保存、ログ出力など 外部とのやり取り にそのまま使える。
    • 型表現:JSON の仕様に従い、真偽値は true/false(小文字)で表現されます。

:whale2: pydantic の主な用途

  • Web API(特に FastAPI)でリクエスト/レスポンスモデル
  • 設定ファイルの管理(環境変数も扱える)
  • データ読み込み(JSON, APIレスポンス, DBからのデータ)
  • 型安全なクラスとしての利用
0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?