pytantic补充
class Sound(BaseModel):
sound:str
class Person(BaseModel):
name: str = "abc" # 字符串类型,默认值是abc
c:Optional[int]=None # 或者c:Optional[int] 默认也是None
e:List[str]=[]
sound:List[Sound]=[]
# 把数据传入定义的数据类,或者称作结构体,可以通过解包的方式
external_data = {"name":"aa","c":1,"e":["a","2"]}
person = Person(**external_data)
print(person.copy()) # 浅拷贝
print(Person.parse_obj(obj=external_data)) # 解析数据,注意解析使用的是类,不是实例
print(Person.construct(**external_data)) # 与parse_obj作用相同,区别是不做数据校验
print(Person.parse_raw('{"name":"aa","c":1,"e":["a","2"]}')) # 字符串类型,但是是标准的k、v形式也可以
print(person.schema())
print(person.schema_json())
print(Person.__fields__.keys()) # 输出字段顺序,与定义模型类的顺序相同
a_person = Person(name="aa",c=1,e=["a","2"],sound=[{"sound":"嗯嗯啊啊"},{"sound":"嘤嘤"}])
# pycharm装pydantic插件后,可能会有警告`Expected type 'List[Sound]',got 'List[Dict[str,str]]'instead`,不影响
从实例创建符合sqlachemy的数据
创建pytandic模型,符合orm数据表的类型
from sqlalchemy import Column,Integer,String
from sqlalchemy.dialects.postgresql import ARRAY
from sqlclchemy.ext.declarative import declarative_base
base = declarative_base()
class CompanyOrm(base):
__tablename__='companies'
id = Column(Integer,primary_key=True,nullable=False)
public_key = Column(String(20),index=True,nullable=False,unique=True)
name = Column(String(63),unique=True)
domains = Column(ARRAY(String(255)))
class CompanyMode(BaseModel):
id:int
public_key:constr(max_length=20)
name:constr(max_length=63)
domains:List[constr(max_length=255)]
class Config:
orm_mode = True # 表示pytantic建的数据格式与模型类相对应
to_orm = CompanyOrm(
id=123,
public_key='foobar',
name='Testing',
domains=['example.com','imooc.com']
)
print(CompanyMode.from_orm(to_orm))
在官网中 https://pydantic-docs.helpmanual.io/usage/types/#constrained-types 除了constr还有conint等,理解是使用这种方式后就不需要使用 name:[str] 的方式了 , 与Field的验证方式差不多,只是对不同数据格式的一种简写