python中的数据模子-pydantic浅讲
数据模子-pydantic1. 根本用法
通过继续 BaseModel,你可以界说一个数据模子类。类的属性利用范例注解来声明字段的范例
from pydantic import BaseModel
class User(BaseModel):
name: str
age: int
is_active: bool = True# 默认值
[*]字段范例:每个字段必要指定范例(如 str, int, bool 等)。
[*]默认值:可以给字段设置默认值(如 is_active: bool = True)
2. 数据验证
当用数据初始化模子时,pydantic 会自动验证数据的范例和束缚。如果数据不合法,会抛出 ValidationError
# 合法数据
user1 = User(name="Alice", age=30)
print(user1)# name='Alice' age=30 is_active=True
# 非法数据(类型错误)
try:
user2 = User(name="Bob", age="thirty")
except ValidationError as e:
print(e)# 输出错误详情:age 不是整数
3. 模子实例的属性
模子实例的字段可以直接通过属性访问:
print(user1.name) # Alice
print(user1.age) # 30
print(user1.is_active)# True
4. 字段范例与自动转换
pydantic 会实验将输入数据转换为声明的范例。比方,字符串 “30” 会被转换为整数 30
user3 = User(name="Charlie", age="30", is_active="no")
print(user3)# name='Charlie' age=30 is_active=False
5. 可选字段与必须字段
[*]默认环境下,全部没有默认值的字段都是必填字段。
[*]如果某个字段可以是 None 或可选,必要用 Optional 或 Union
from typing import Optional
class User(BaseModel):
name: str
age: Optional = None# 可选字段
6. 嵌套模子
BaseModel 可以嵌套其他 BaseModel
class Address(BaseModel):
street: str
city: str
class User(BaseModel):
name: str
address: Address# 嵌套模型
user = User(name="Alice", address={"street": "Main St", "city": "New York"})
print(user.address.city)# New York
7. 自界说验证器
利用 @validator 装饰器添加自界说验证逻辑
from pydantic import validator
class User(BaseModel):
name: str
age: int
@validator("age")
def age_must_be_positive(cls, v):
if v < 0:
raise ValueError("年龄不能为负数")
return v
try:
user = User(name="Bob", age=-10)
except ValidationError as e:
print(e)# 年龄不能为负数
8. 模子设置
通过内部的 Config 类可以设置模子运动:
class User(BaseModel):
name: str
age: int
class Config:
allow_mutation = False# 禁止修改实例
extra = "forbid" # 禁止额外字段
user = User(name="Alice", age=30)
user.age = 31# 抛出错误:实例不可变
常用设置选项:
[*]allow_mutation: 是否答应修改实例
[*]extra: 控制额外字段的运动(allow、ignore、forbid)。
[*]json_encoders: 自界说 JSON 编码方式
9. 数据剖析与导出
[*]剖析数据:用 parse_obj 或 parse_raw 剖析字典或 JSON 字符串。
[*]导出数据:用 dict() 或 json() 导出为字典或 JSON
user_data = {"name": "Alice", "age": 30}
user = User.parse_obj(user_data)# 从字典解析
print(user.dict())# {'name': 'Alice', 'age': 30, 'is_active': True}
print(user.json())# {"name": "Alice", "age": 30, "is_active": true}
10. 动态默认值
如果默认值必要动态天生(比方列表),利用 default_factory:
from typing import List
from pydantic import Field
class Model(BaseModel):
items: List = Field(default_factory=list)
model = Model()
print(model.items)# []
11. 字段别名
可以通过 alias 设置字段的别名(用于剖析数据)
class User(BaseModel):
name: str
age: int = Field(..., alias="user_age")
user = User.parse_obj({"name": "Alice", "user_age": 30})
print(user.age)# 30
总结
BaseModel 的焦点功能包罗:
1、数据验证:确保输入数据符合范例和束缚。
2、自动范例转换:将输入数据转换为声明范例。
3、嵌套模子:支持复杂数据结构。
4、自界说验证:通过 @validator 添加业务逻辑。
5、机动的设置:通过 Config 类控制模子运动
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
页:
[1]