说明
pydantic 库是 python 中用于数据接口定义检查
与设置管理
的库。
pydantic 在运行时强制
执行类型提示
,并在数据无效
时提供友好的错误
。
安装:pip install pydantic
BaseModel 基本使用
from pydantic import BaseModel class Info(BaseModel): id: int name: str if __name__ == '__main__': # 实例化使用方式 info = {'id': 1, 'name': 'Bob'} print(Info(**info)) print(Info(id='1', name='Bob')) print(Info(id=1, name='Bob').id) print(Info(id=1, name='Bob').name) print(Info(id=1, name='Bob').json()) print(Info(id=1, name='Bob').dict()) print(Info(id=1, name='Bob').copy()) # 浅拷贝 >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> id=1 name='Bob' id=1 name='Bob' 1 Bob {"id": 1, "name": "Bob"} {'id': 1, 'name': 'Bob'} id=1 name='Bob'
BaseModel 错误提示
错误提示很详细
from pydantic import BaseModel, ValidationError class Info(BaseModel): id: int name: str if __name__ == '__main__': try: print(Info(id=1, name=[12, 34])) except ValidationError as e: print(e.json()) >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> # 提示很详细 [ { "loc": [ "name" ], "msg": "str type expected", "type": "type_error.str" } ]
BaseModel 默认验证类型
其他类型:https://pydantic-docs.helpmanual.io/usage/types/
相关限制
- conlist:
- item_type: Type[T]: 列表项的
类型
- min_items: int = None: 列表中的
最小
项目数 - max_items: int = None: 列表中的
最大
项目数
- item_type: Type[T]: 列表项的
- conset:
- item_type: Type[T]: 列表项的
类型
- min_items: int = None: 集合中的
最小
项目数 - max_items: int = None: 集合中的
最大
项目数
- item_type: Type[T]: 列表项的
- conint:
- strict: bool = False: 控制类型强制
- gt: int = None: 强制整数
大于
设定值 - ge: int = None: 强制整数
大于或等于
设定值 - lt: int = None: 强制整数
小于
设定值 - le: int = None: 强制整数
小于或等于
设定值 - multiple_of: int = None: 强制整数为设定值的
倍数
- confloat:
- strict: bool = False: 控制类型强制
- gt: int = None: 强制浮点数
大于
设定值 - ge: int = None: 强制浮点数
大于或等于
设定值 - lt: int = None: 强制浮点数
小于
设定值 - le: int = None: 强制浮点数
小于或等于
设定值 - multiple_of: int = None: 强制浮点数为设定值的
倍数
- constr:
- strip_whitespace: bool = False:
删除前尾空格
- to_lower: bool = False: 将所有字符
转为小写
- strict: bool = False: 控制类型强制
- min_length: int = None: 字符串的
最小
长度 - max_length: int = None: 字符串的
最大
长度 - regex: str = None:
正则表达式
来验证字符串
- strip_whitespace: bool = False:
from pydantic import BaseModel, constr, conint from typing import List from datetime import date class Info(BaseModel): id: int # 整形 name: str # 字符串 age: conint(gt=0, le=100) # gt > 、ge >=、lt < 、le <= time: date is_boy: bool # 布尔 friend: List[str] = None # 有默认值 (此参数可选)自定义组合 hobby: List[constr(max_length=255)] # 现在 str 长度 if __name__ == '__main__': print(Info(id=1, name='Bob', age=12, time="2001-12-23", is_boy=True, friend=['A', 'B'], hobby=['CC', 'DD']).json()) >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> {"id": 1, "name": "Bob", "age": 12, "time": "2001-12-23", "is_boy": true, "friend": ["A", "B"], "hobby": ["CC", "DD"]}
BaseModel 子类嵌套
from pydantic import BaseModel, constr, conint from typing import Optional class City(BaseModel): city_name: str description: constr(max_length=255) class Info(BaseModel): id: int # 整形 name: str # 字符串 age: Optional[conint(gt=0, le=100)] # 可选 gt > 、ge >=、lt < 、le <= city: City if __name__ == '__main__': print(Info(id=1, name='Bob', age=12, city={'city_name': '成都', 'description': '好地方'})..dict()) # json 中文会被编码 >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> # {"id": 1, "name": "Bob", "age": 12, "city": {"city_name": "\u6210\u90fd", "description": "\u597d\u5730\u65b9"}} {'id': 1, 'name': 'Bob', 'age': 12, 'city': {'city_name': '成都', 'description': '好地方'}}
从 ORM对象模型 创建 BaseModel 实例
这的
ORM对象模型
使用的SQLAlchemy 模块
安装:pip3 instaill SQLAlchemy
创建 ORM对象模型
from sqlalchemy import Column, Integer, String from sqlalchemy.ext.declarative import declarative_base Base = declarative_base() class ORMInfo(Base): # 创建 ORM 映射 __tablename__ = 'orm_info' id = Column(Integer, primary_key=True, index=True, autoincrement=True) name = Column(String(100), unique=True, nullable=False) city = Column(String(100), unique=True, nullable=False) from pydantic import BaseModel, constr class ModelInfo(BaseModel): # 创建与 ORM 对应的 BaseModel 类 id: int name: constr(max_length=100) city: constr(max_length=100) class Config: orm_mode = True # 默认 False,需要从 ORM 实例化数据需要设置 True orm_info = ORMInfo( id=1, name='Bob', city='zx') print(orm_info) model_info = ModelInfo.from_orm(orm_info) # 从 ORM模型 实例化数据 print(model_info)
版权声明:《 【PY模块】pydantic 基础类 BaseModel 用法 》为明妃原创文章,转载请注明出处!
最后编辑:2022-2-6 09:02:43