干翻全岛蛙蛙 发表于 3 小时前

python中的数据模子-pydantic浅讲

数据模子-pydantic

1. 根本用法

通过继续 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]
查看完整版本: python中的数据模子-pydantic浅讲