FastAPI 学习之路(二十一)请求体 更新数据

摘要:
系列文章:FastAPI学习路径(I)FastAPI——高性能web开发框架FastAPI学习道路(II)FastAPI学习路线(III)FastAPI学路线(IV)FastAPI学会路线(V)FastAPI学到路线(VI)查询参数,验证字符串FastAPI学习路径(7)验证字符串FastAPI学习路径(8)验证路径参数和值FastAPI学习道路(9)如何处理请求主体中的多个参数?

 系列文章:

  FastAPI 学习之路(一)fastapi--高性能web开发框架

  FastAPI 学习之路(二)

  FastAPI 学习之路(三)

  FastAPI 学习之路(四)

  FastAPI 学习之路(五)

      FastAPI 学习之路(六)查询参数,字符串的校验

  FastAPI 学习之路(七)字符串的校验

    FastAPI 学习之路(八)路径参数和数值的校验

  FastAPI 学习之路(九)请求体有多个参数如何处理?

  FastAPI 学习之路(十)请求体的字段

      FastAPI 学习之路(十一)请求体 - 嵌套模型 

    FastAPI 学习之路(十二)接口几个额外信息和额外数据类型

      FastAPI 学习之路(十三)Cookie 参数,Header参数

    FastAPI 学习之路(十四)响应模型

  FastAPI 学习之路(十五)响应状态码

    FastAPI 学习之路(十六)Form表单

     FastAPI 学习之路(十七)上传文件

     FastAPI 学习之路(十八)表单与文件

  FastAPI 学习之路(十九)处理错误

     FastAPI 学习之路(二十)接口文档配置相关

  我们都知道,去创建请求体,更新数据我们用PUT请求,我们去试着更新下数据。

        我们有一组数据,我们要更新描述。

from typing import List, Optional
from fastapi import FastAPI
from fastapi.encoders import jsonable_encoder
from pydantic import BaseModel
app = FastAPI()
class Item(BaseModel):
    name: Optional[str] = None
    description: Optional[str] = None
    price: Optional[float] = None
    tax: float = 10.5
    tags: List[str] = []
items = {
    "one": {"name": "苹果", "price": 50.2}
}
@app.put("/items/", response_model=Item)
def update_item(name: str, item: Item):
    update_item_encoded = jsonable_encoder(item)
    items[name] = update_item_encoded
    return update_item_encoded
@app.get("/items/{item_id}", response_model=Item)
def read_item(item_id: str):
    return items[item_id]

我们去获取下

FastAPI 学习之路(二十一)请求体 更新数据第1张

 我们去更新下数据

FastAPI 学习之路(二十一)请求体 更新数据第2张

 我们去更新一个不存在的数据

FastAPI 学习之路(二十一)请求体 更新数据第3张

 更新部分数据时,可以在 Pydantic 模型的 .dict() 中使用 exclude_unset 参数。

    比如,item.dict(exclude_unset=True)。我们去看我们实际的例子

from typing import List, Optional
from fastapi import FastAPI
from fastapi.encoders import jsonable_encoder
from pydantic import BaseModel
app = FastAPI()
class Item(BaseModel):
    name: Optional[str] = None
    description: Optional[str] = None
    price: Optional[float] = None
    tax: float = 10.5
    tags: List[str] = []
items = {
    "one": {"name": "苹果", "price": 50.2}
}
@app.put("/items/", response_model=Item)
def update_item(name: str, item: Item):
    stored_item_data = items[name]
    stored_item_model = Item(**stored_item_data)
    update_data = item.dict(exclude_unset=True)
    updated_item = stored_item_model.copy(update=update_data)
    items[name] = jsonable_encoder(updated_item)
    return updated_item
@app.get("/items/{item_id}", response_model=Item)
def read_item(item_id: str):
    return items[item_id]

我们去看下去后的效果

FastAPI 学习之路(二十一)请求体 更新数据第4张

更新部分数据小结

简而言之,更新部分数据做法:

  • 使用  PUT 也可以使用PATCH;

  • 提取存储的数据;

  • 把数据放入 Pydantic 模型;

  • 生成不含输入模型默认值的 dict (使用 exclude_unset 参数);

    • 只更新用户设置过的值,不用模型中的默认值覆盖已存储过的值。

  • 为已存储的模型创建副本,用接收的数据更新其属性 (使用 update 参数)。

  • 把模型副本转换为可存入数据库的形式(比如,使用 jsonable_encoder)。

    • 这种方式与 Pydantic 模型的 .dict() 方法类似,但能确保把值转换为适配 JSON 的数据类型,例如, 把 datetime 转换为 str 。

  • 把数据保存至数据库;

  • 返回更新后的模型。

文章首发在公众号,欢迎关注。

FastAPI 学习之路(二十一)请求体 更新数据第5张

免责声明:文章转载自《FastAPI 学习之路(二十一)请求体 更新数据》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇Ubuntu 如何更换阿里源ueditor使用遇到的问题下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

随便看看

Hibernate 数据的批量插入、更新和删除

对于这个批处理场景,Hibernate提供了一个批处理解决方案。接下来,我们将从批插入、批更新和批删除三个方面介绍如何处理此批处理场景。为了避免这种情况,Hibernate为批量更新和批量删除提供了类似于SQL的HQL语法。...

MongoDB 查看集合的统计信息

--1查看集合的统计信息srs0:“size”:“ok”:可以理解为集合名称计数:集合中的文档总数大小:连续分配的数据块索引:最近分配的块的大小paddingFactor:所有索引索引的总大小大小:--2显示rs0:db。东西。stats(1024)(KB);{“ns”:“count”:“size”:“indexSize”:...

微信小程序通过background-image设置背景图片

微信小程序通过背景图像设置背景:仅支持在线图像和base64图像,不支持本地图像;设置base64图像的步骤如下:1.在网站上http://imgbase64.duoshitong.com/将图片转换为base64格式2的文本。在WXSS中使用上述文本:background image:url(“data:image/png;base64,iVBORw0KG...

自定义样式滚动条

自定义IE浏览器滚动条样式追溯浏览器对滚动条的自定义,恐怕最早的就是IE浏览器了。感觉IE浏览器滚动条自定制功能并不是很强,只能控制一样显示各个部分的颜色而已,像宽度,结构等都无法控制,要靠出个性点的滚动条,很难!自定义FireFox浏览器滚动条在网上找了很多关于Firfox自定义浏览器滚动条的方法,发现firefox中却实是不支持的。...

Ansible-Tower--安装配置及破解

Ansible-Tower是将ansible的指令界面化,简明直观,简单易用。2)Ansibke-tower其实就是一个图形化的任务调度,复杂服务部署,IT自动化的一个管理平台,属于发布配置管理系统,支持Api及界面操作,Django编写。3)Ansible-tower可以通过界面从github拉取最新playbook实施服务部署,提高生产效率。...

SkyWalking 服务端配置

在安装基于Docker的ElasticSearch时,在为什么需要链接跟踪一章中,我们介绍了几种SkyWalking存储解决方案。官方推荐的解决方案是ElasticSearch,因此我们需要首先安装Elastic搜索。...