字段类型
一些额外的类型
类型 | 说明 |
---|---|
typing.Any | 任何类型,包括None |
typing.TypeVar | 泛型 |
typing.Optional | Optional[T]相当于Union[T,None] |
typing.TypedDict | 相当于dict,key的种类固定,value必须是指定的类型 相当于对key,value进行校验 |
typing.Queue, typing.Deque, typing.FrozenSet | 一些集合类型 |
typing.Pattern | 正则表达式 |
ipaddress模块中的一些类型 | 网络ip地址等 |
enum及其子类 | 枚举 |
pathlib.Path | 路径 |
uuid.UUID | uuid |
pydantic.ByteSize | 存储单位转化,ByteSize(1024)相当于1.0KiB |
typing.Literal | 字面量,Python3.8在typing_extensions模块中 |
各类型说明
pydantic会对类型做自动转换,无法识别的值或转换失败会抛出ValidationError。
bool
- True, False
- 1, 1, ‘0’, ‘off’, ‘f’, ‘false’, ‘n’, ‘no’, ‘1’, ‘on’, ‘t’, ‘true’, ‘y’, ‘yes’
- 解码后是上述字符串的bytes类型
Bytes和ByteSize
- bytes
bytes,bytearray会调用bytes(v),str会调用v.encode。 - SecretBytes
同bytes,部分加密,输出的时候有*掩码处理。 - ByteSize
将带单位的容量大小转华为数字,如1KB转化为1024 - conbytes
返回带有约束检查的bytes类型import annotated_types from typing_extensions import Annotated from pydantic import BaseModel, Strict class MyModel(BaseModel): # Instead of `my_bytes: conbytes(strict=True, min_length=10, max_length=20)`, use: my_bytes: Annotated[bytes, Strict(), annotated_types.Len(10, 20)]
Callable
只验证其是否可调用,不对参数、返回值进行检查
datetimes
支持以下四种类型
- datetime.datetime
支持以下值- datetime对象
- int或者float或者字符串时间戳,当成Unix时间戳处理,在和视为秒数,否则视为毫秒数。
- 格式化字符串,格式为YYYY-MM-DD[T]HH:MM[:SS[.ffffff]][Z or [±]HH[:]MM]
- datetime.date
- date对象
- int,float或者字符串时间戳,处理方法同datetime
- 格式化字符串,YYYY-MM-DD
- datetime.time
- time对象
- 格式化字符串,HH:MM[:SS[.ffffff]][Z or [±]HH[:]MM]
- datetime.timedelta
- timedelta对象
- int或者float,视为秒数
- 格式化字符串,[-][DD ][HH:MM]SS[.ffffff],[±]P[DD]DT[HH]H[MM]M[SS]S (ISO 8601 format for timedelta)
pydantic扩展时间类型
增加了额外的时间校验
- PastDate,datetime.date,但必须是过去的日期
- FurtureDate,未来的date
- PastDatetime,过去的datetime
- FurtureDatetime,未来的datetime
- AwareDatetime,带时区的时间
- NaiveDatetime,不带时区的时间
Encoded
需要自定义编解码器,见pydantic文档
- EncodedBytes,自定义编解码的bytes
- EncodedStr,自定义编解码的str
File Types
- FilePath
pydantic扩展类型,相当于pathlib.path,但是必须是文件且路径必须存在。 - DirectoryPath
pydantic扩展类型,相当于pathlib.path,但是必须是目录且路径必须存在。
JSON
泛型类型,Json[List[int]]会将字符串 ‘[1,2,3,4]’ 转化为列表。
Number Type
除了基本的int,float,decimal之外,还有IntEnum,带约束的conint,confloat,condecimal,PositiveInt,NegtiveInt,NonPositiveInt,NonnegtiveInt等。
Secret
敏感信息保护,打印或者序列化的结果带*号或者为空串。有SecretStr和SecretBytes两种类型。
String Types
- str,基本字符串类型
- EmailStr,邮箱格式
- NamedEmail,Fred Bloggs fred.bloggs@example.com,name是Fred Bloggs。
- constr,字符串约束,大小写,空白等
- ImportString,合法的python模块字符串且可导入成功,如math.cos,math:sin。
Type和TypeVar
类型,Type[T]表示T的class类型,T表示T的对象类型
Union
Discriminated Unions,对特定的类型进行校验,文档
URL
- AnyUrl,任何协议,不需要顶级域名,需要主机名
- AnyHttpUrl,http或者https协议, 不需要顶级域名, 需要主机名
- HttpUrl,http或者https协议, 需要顶级域名, 需要主机名,最大长度2083
- FileUrl,file协议,不需要主机名
- PostgresDsn,MySQLDsn等,数据库连接url。
- IPvAnyAddress、IPvAnyInterface,IPvAnyNetwork。
Extra Types
- Color
- Payment Card
- Phone Number
- Routing Number
- MAC Address
类型转换表
https://docs.pydantic.dev/latest/usage/conversion_table/
Q.E.D.