乐趣区

关于python:Pydantic强大的Python-数据验证库

Pydantic

Pydantic 是一个在 Python 中用于数据验证和解析的第三方库。它提供了一种简略且直观的形式来定义数据模型,并应用这些模型对数据进行验证和转换。

Pydantic 的一些次要个性:

  1. 类型注解:Pydantic 应用类型注解来定义模型的字段类型。你能够应用 Python 内置的类型、自定义类型或者其余 Pydantic 提供的验证类型。
  2. 数据验证:Pydantic 主动依据模型定义进行数据验证。它会查看字段的类型、长度、范畴等,并主动报告验证谬误。你能够应用 ValidationError 异样来捕捉验证谬误。
  3. 模型转换:Pydantic 提供了从各种数据格式(例如 JSON、字典)到模型实例的转换性能。它能够主动将输出数据解析成模型实例,并保留类型安全性和验证规定。

Pydantic 应用前须要先进行装置。

pip install pydantic

Pydantic 基本操作

应用 Pydantic,能够定义一个模型类,该类须要继承 pydantic 中的 BaseModel 类,模型类形容了数据的构造和类型,并指定验证规定。

而后,能够应用这个模型类来验证输出的数据是否合乎预期,并以类型平安的形式拜访和操作数据。

from pydantic import BaseModel, ValidationError
class User(BaseModel):    
    name: str    
    age: int    
    email: str
try:    
    user = User(name="Alice", age="30", email="alice@example.com") 
except ValidationError as e:    
    print(e.json())

如果创立实例的数据不合乎类型注解的要求,则会报 ValidationError 谬误。

Pydantic 高级操作

Pydantic 还能够联合 typing 模块,进行默认值,可选字段属性等验证的高级操作。甚至还能够通过 EmailStr 类来间接验证邮件正确性,但该类依赖一个第三方模块,在应用前须要应用 pip install email-validator 进行装置后才能够应用。

from typing import Optional
from pydantic import BaseModel, EmailStr
class User(BaseModel):    
    name: str    
    age: int    
    email: EmailStr    
    phone: Optional[str] = None

user = User(name="Alice", age=30, email="alice@example.com")  # 无效
user = User(name="Alice", age=30, email="invalid_email")  # 谬误:有效的电子邮件 

Field 对象

Field 函数提供了许多参数来定制字段的行为。以下是一些罕用的参数:

  • ...:示意该字段是必填项。
  • default:定义字段的默认值。如果未提供该值,则默认为 None, 不能与 ... 同时应用。
  • min_lengthmax_length:针对字符串类型的字段定义最小和最大长度限度。
  • gtgeltle:针对数值类型的字段定义大于 gt、大于等于 ge、小于 lt 和小于等于 le 的限度。
from pydantic import BaseModel, EmailStr, ValidationError, Field
class User(BaseModel):    
    name: str = Field(..., min_length=1, max_length=10)    
    age: int = Field(..., ge=0, le=200)    
    email: EmailStr    
    phone: str = Field(default="13800138000", min_length=11, max_length=11)
user = None
try:    
    user = User(name="Tom", age=22, email="alice@example.com")
except ValidationError as e:    
    a = eval(e.json())    
    print(a[0]["msg"])
finally:    
    print(user)

数据转换

通过定义模型类,能够将通过网络传输或数据库查问的数据转换成模型类对象在程序中应用。

反之,也能够将解决过后的模型类对象转换成对应的字典或 JSON 数据进行存储或传输。

模型类转换为字典

应用 模型类.model_dump() 办法能够将一个模型类实例对象转换为字典类型数据。

from pydantic import BaseModel, EmailStr, Field
class User(BaseModel):    
    name: str = Field(..., min_length=1, max_length=10)    
    age: int = Field(..., ge=0, le=200)    
    email: EmailStr    
    phone: str = Field(default="13800138000", min_length=11, max_length=11)
user = User(name="Tom", age=22, email="alice@example.com")
data = User.model_dump(user)
print(data)
print(type(data))

模型类转换为 JSON

应用 模型类.model_dump_json() 办法能够将一个模型类实例对象转换为 JSON 字符串。

from pydantic import BaseModel, EmailStr, Field
class User(BaseModel):    
    name: str = Field(..., min_length=1, max_length=10)    
    age: int = Field(..., ge=0, le=200)    
    email: EmailStr    
    phone: str = Field(default="13800138000", min_length=11, max_length=11)
user = User(name="Tom", age=22, email="alice@example.com")
data = User.model_dump_json(user)
print(data)
print(type(data))

获取更多软件测试技术材料 / 面试题解析,请点击!

退出移动版