[note] Pydantic
資料來源
- Pydantic V2: Essentials @ Udemy、GitHub
- Pydantic 官方文件
[TOC]
- 基本使用
- Field Configuration: Serialize, Deserialize, and Alias
- alias 會自動作用在 deserialize 時,但不會自動作用在 serialize 時
- populate_by_name:deserialize 時可以不套用 alias,而是用原本的 field name
- by_alias:serialize 時也希望用 alias
- serialization_alias:在 serialize 的時候使用特定的 alias
- alias_generator:針對所有欄位套用轉換成 alias 的 function
- validation_alias:只作用在 deserialization
- @field_serializer:客製化 serialize 的方式
- Default
Pydantic 是一個方便我們做以下事情的工具:
- Deserializing data:將資料從 dictionary 或 JSON 轉成 model 的過程
- Validation:確認資料符合定義的 model,包含欄位和型別。
- 預設的情況下,會進行型別轉換(參考 Conversion Table)
- Serializing model instance:將 model instance 轉成 dictionary 或 JSON 的過程
基本使用
定義 Pydantic Model
class Person(BaseModel):
first_name: str
last_name: str
age: int
Optional Fields:有給預設值
提示
欄位有給預設值就會是 Optional Field。
如果希望某些欄位是 Optional 的,只需要提供該欄位預設值:
class Circle(BaseModel):
center: tuple[int, int] = (0, 0) # center 會是 optional,沒給值的話預設是 (0, 0)
radius: int
c = Circle(radius=1) # Circle(radius=1)
要特別留意的是,Pydantic 不會驗證填入的預設值是否符合該欄位的型別,也就是說:
class Person(BaseModel):
age: int = "30" # Pydantic 不會對預設值進行型別驗證
或
class Model(BaseModel):
Field: int = None
都是可以的,但卻會建出預設就不符合型別定義的 instance。
危險
Pydantic 預設不會驗證填入的預設值是否符合該欄位的型別!