前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >FastAPI 学习之路(二十一)请求体 - 更新数据

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

作者头像
雷子
发布2021-08-25 10:11:45
8600
发布2021-08-25 10:11:45
举报
文章被收录于专栏:雷子说测试开发

FastAPI 系列文章:

FastAPI 学习之路(一)

FastAPI 学习之路(二)

FastAPI 学习之路(三)

FastAPI 学习之路(四)使用pydantic模型做请求体

FastAPI 学习之路(五)

FastAPI 学习之路(六)

FastAPI 学习之路(七)

FastAPI 学习之路(八)

FastAPI 学习之路(九)

FastAPI 学习之路(十)

FastAPI 学习之路(十一)

FastAPI 学习之路(十二)额外数据类型

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

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

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

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

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

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

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

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

前言

我们之前分享一些配置,这次分享一下请求体去更新数据。

正文

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

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

代码语言:javascript
复制
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]

我们去获取下

我们去更新下数据

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

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

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

代码语言:javascript
复制
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]

我们去看下去后的效果

更新部分数据小结

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

  • 使用 PUT 也可以使用PATCH;
  • 提取存储的数据;
  • 把数据放入 Pydantic 模型;
  • 生成不含输入模型默认值的 dict (使用 exclude_unset 参数);
    • 只更新用户设置过的值,不用模型中的默认值覆盖已存储过的值。
  • 为已存储的模型创建副本,用接收的数据更新其属性 (使用 update 参数)。
  • 把模型副本转换为可存入数据库的形式(比如,使用 jsonable_encoder)。
    • 这种方式与 Pydantic 模型的 .dict() 方法类似,但能确保把值转换为适配 JSON 的数据类型,例如, 把 datetime 转换为 str 。
  • 把数据保存至数据库;
  • 返回更新后的模型。

后记

发现问题,解决问题。遇到问题,慢慢解决问题即可。

欢迎关注雷子说测试开发,后续将会持续为大家分享更多的技术知识

如果你有问题可以留言或者加我微信:952943386。2021,一起牛转钱坤,一起牛逼。

如果觉得这篇文章还不错,来个【分享、点赞、在看】三连吧,让更多的人也看到~

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2021-08-15,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 雷子说测试开发 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • FastAPI 系列文章:
    • 更新部分数据小结
    相关产品与服务
    对象存储
    对象存储(Cloud Object Storage,COS)是由腾讯云推出的无目录层次结构、无数据格式限制,可容纳海量数据且支持 HTTP/HTTPS 协议访问的分布式存储服务。腾讯云 COS 的存储桶空间无容量上限,无需分区管理,适用于 CDN 数据分发、数据万象处理或大数据计算与分析的数据湖等多种场景。
    领券
    问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档