FastAPI Pydantic
Pydantic 是一个用于数据解析和验证的Python库。它使用较新版本的Python(3.6版本以上)的类型提示机制,并在运行期间验证类型。Pydantic定义了 BaseModel 类。它充当了创建用户定义模型的基类。
下面的代码定义了一个学生类,作为基于BaseModel的模型。
from typing import List
from pydantic import BaseModel
class Student(BaseModel):
id: int
name :str
subjects: List[str] = []
学生 类的属性是用类型提示声明的。请注意,科目属性是在打字模块中定义的列表类型,并且是内置的列表类型。
我们可以用一个具有匹配结构的字典来填充学生类的一个对象,如下所示
>>> data = {
'id': 1,
'name': 'Ravikumar',
'subjects': ["Eng", "Maths", "Sci"],
}
>>> s1=Student(**data)
>>> print (s1)
id=1 name='Ravikumar' subjects=['Eng', 'Maths', 'Sci']
>>> s1
Student(id=1, name='Ravikumar', subjects=['Eng', 'Maths', 'Sci'])
>>> s1.dict()
{'id': 1, 'name': 'Ravikumar', 'subjects': ['Eng', 'Maths', 'Sci']}
Pydantic 会尽可能地自动得到数据类型的转换。例如,即使字典中的id键被分配了一个数字的字符串表示(比如’123’),它也会把它胁迫成一个整数。但只要不可能,就会引发一个异常。
>>> data = {
'id': [1,2],
'name': 'Ravikumar',
'subjects': ["Eng", "Maths", "Sci"],
}
>>> s1=Student(**data)
Traceback (most recent call last):
File "<pyshell#13>", line 1, in <module>
s1=Student(**data)
File "pydantic\main.py", line 406, in
pydantic.main.BaseModel.__init__
pydantic.error_wrappers.ValidationError: 1 validation error
for Student
id
value is not a valid integer (type=type_error.integer)
Pydantic还包含一个Field类,用于声明模型属性的元数据和验证规则。首先修改Student类,以便在 “name “属性上应用Field类型,如下所示
from typing import List
from pydantic import BaseModel, Field
class Student(BaseModel):
id: int
name :str = Field(None, title="The description of the item", max_length=10)
subjects: List[str] = []
填充数据,如下图所示。这里的名字超过了规定的 最大长度 。Pydantic按照预期抛出了 ValidationError 。
>>> data = {
'id': 1,
'name': 'Ravikumar Sharma',
'subjects': ["Eng", "Maths", "Sci"],
}
>>> s1=Student(**data)
Traceback (most recent call last):
File "<pyshell#28>", line 1, in <module>
s1=Student(**data)
File "pydantic\main.py", line 406, in
pydantic.main.BaseModel.__init__
pydantic.error_wrappers.ValidationError: 1 validation error for Student
name
ensure this value has at most 10 characters
(type=value_error.any_str.max_length; limit_value=10)
Pydantic模型可以用来与 SQLAlchemy 或 Peewee 等ORM模型进行映射 。