首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >fastapi PUT更新数据 / PATCH部分更新

fastapi PUT更新数据 / PATCH部分更新

作者头像
Michael阿明
发布2022-01-07 11:35:11
发布2022-01-07 11:35:11
1.6K00
代码可运行
举报
运行总次数:0
代码可运行

文章目录

learn from https://fastapi.tiangolo.com/zh/tutorial/body-updates/

1. PUT 更新

  • 注意,put 没有指定的值,会被重置为默认值
代码语言:javascript
代码运行次数:0
运行
复制
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 = {
    "foo": {"name": "Foo", "price": 50.2},
    "bar": {"name": "Bar", "description": "The bartenders", "price": 62, "tax": 20.2},
    "baz": {"name": "Baz", "description": None, "price": 50.2, "tax": 10.5, "tags": []},
}


@app.get("/items/{item_id}", response_model=Item)
async def read_item(item_id: str):
    return items[item_id]


@app.put("/items/{item_id}")
async def update_item(item_id: str, item: Item):
    update_item_encoded = jsonable_encoder(item)
    items[item_id] = update_item_encoded
    return jsonable_encoder(items)

2. 用 PATCH 进行部分更新

  • 只发送 要更新的数据,其余数据保持不变
  • 可以在 Pydantic 模型的 .dict() 中使用 exclude_unset 参数:排除没有设置的参数(默认值的参数)
  • .copy() 为已有模型创建副本,调用 update 参数更新数据
代码语言:javascript
代码运行次数:0
运行
复制
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 = {
    "foo": {"name": "Foo", "price": 50.2},
    "bar": {"name": "Bar", "description": "The bartenders", "price": 62, "tax": 20.2},
    "baz": {"name": "Baz", "description": None, "price": 50.2, "tax": 10.5, "tags": []},
}


@app.get("/items/{item_id}", response_model=Item)
async def read_item(item_id: str):
    return items[item_id]


@app.patch("/items/{item_id}", response_model=Item)
async def update_item(item_id: str, item: Item):
    stored_item_data = items[item_id] # 提取存储的数据
    stored_item_model = Item(**stored_item_data) # 原来的数据生成新的model
    update_data = item.dict(exclude_unset=True) # 原来的model除去未设置的字段
    updated_item = stored_item_model.copy(update=update_data)# 创建新的model副本,更新数据(只更新设置的字段)
    items[item_id] = jsonable_encoder(updated_item) # 模型副本转换为可存入数据的形式,存入数据库
    return updated_item
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2021/10/22 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

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

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

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 文章目录
  • 1. PUT 更新
  • 2. 用 PATCH 进行部分更新
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档