ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

高性能 FastAPI 框架入门精讲-1Pydantic的基本用法

2022-01-02 19:31:52  阅读:265  来源: 互联网

标签:FastAPI 精讲 数据类型 user 1Pydantic print data id User


pydantic是一个关于数据格式和校验的包,它可以自动打数字字符串转换成int,也可以直接把对象转换成字典和json串,举例说明:

1我定义一个模型类
2我定义一个约束模型类的pydantic
3通过pydantic把实例格式化成我们想要的数据

 示例一:

创建符合ORM对象的模型

from sqlalchemy import Column, Integer, String
from sqlalchemy.dialects.postgresql import ARRAY
from sqlalchemy.ext.declarative import declarative_base
from pydantic import BaseModel, constr

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)
    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=163)
    domains: List[constr(max_length=255)]
    #表示建立数据格式和模型类是对应的
    class Config:
        orm_mode = True

#实例化模型类
co_orm = CompanyOrm(
    id = 123,
    public_key = 'foobar',
    name = 'Testing',
    domains = ['tangyingjie.com','example.com']
)

#把实例格式化成我们需要的数据类型
print(CompanyMode.from_orm(co_orm))

 示例二:

假如说我要把实例external_data格式化成我规定的数据类型:

#我规定的数据类型:
class User(BaseModel):
    id:int
    name:str = "john sown"
    signup_ts:Optional[datetime]=Npne #是按字段不填就设为Null
    friends: List[int] = [] #朋友有很多,所以是一个列表,默认是一个空列表

#实例
external_data = {
    "id":"123",
    "signup_ts":"2022-01-02 12:39",
    "friends":[1,2,"3"]
}

#实例化
user = User(**external_data)

#1实例化后调用属性
print(repr(user.signup_ts)) #将对象转换成供解释器读取的形式
print(dict(user)) #把对象转换成字典
print(user.dict()) #把对象转换成字典
print(user.json()) #把最想转换成json
print(user.copy()) #浅拷贝对象

#用于规定数据类型的类里的的parse_obj可以直接解析字典数据对象
print(User.parse_obj(obj=external_data))

#用于规定数据类型的类里的oarse_raw可以直接解析key-value形式的字符串
print(User.parse_raw('{"id":"123","signup_ts":"2021-01-02 13:28"}'))

#通过__fields__.key()方法可以查看“规定数据类型类里”里面的所有字段
print(User.__fields__keys())

#用于规定数据类型的类里的construct()方法不会校验数据而直接创建模型(用的时候要小心)
user_data={"id":"error","signup_ts":"2021-01-02 13:28"}
print(User.construct(**user_data))

 示例三

用于规定数据类型的类(pydantic类)可以递归使用,所谓递归就是在一个模型里调用另外一个模型

class Sound(BaseModel):
    sound: str

class Dog(BaseModel):
    birthday: data
    weight :float
    sound: List[Sound] #不同的狗有不同的叫声

dogs = Dog(birthday=date.today(), weight=6.99,sound=[{"sound":"wang wang"},{"sound":"ao ao"}])
print(dogs.dict())

 示例四:

FastAPI生成文件并写入内容的方法:

from pathlib import Path
#指定当前路径下的文件名
path = Path('pydantic_tutorial_data')
#在文件里写内容
path.write_text('{"id":"123","signup_ts":"2021-01-02 13:28""}')
#把文件内容传给规定数据类型的类里进行实例化
print(User.parse_file(path))

 

标签:FastAPI,精讲,数据类型,user,1Pydantic,print,data,id,User
来源: https://www.cnblogs.com/tyjs09/p/15757510.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有