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

简介: fastapi PUT更新数据 / PATCH部分更新

文章目录


1. PUT 更新


  • 注意,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 = {
    "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)

image.pngimage.png


2. 用 PATCH 进行部分更新


  • 只发送 要更新的数据,其余数据保持不变
  • 可以在 Pydantic 模型的 .dict() 中使用 exclude_unset 参数:排除没有设置的参数(默认值的参数)
  • .copy() 为已有模型创建副本,调用 update 参数更新数据
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

image.png

相关文章
|
4月前
|
安全 关系型数据库 数据库
FastAPI数据库操作秘籍:如何通过高效且安全的数据库访问策略,使你的Web应用飞速运转并保持数据完整性?
【8月更文挑战第31天】在构建现代Web应用时,数据库操作至关重要。FastAPI不仅简化了API创建,还提供了高效数据库交互的方法。本文探讨如何在FastAPI中实现快速、安全的数据处理。FastAPI支持多种数据库,如SQLite、PostgreSQL和MySQL;选择合适的数据库可显著提升性能。通过安装相应驱动并配置连接参数,结合ORM库(如Tortoise-ORM或SQLAlchemy),可以简化数据库操作。使用索引、批量操作及异步处理等最佳实践可进一步提高效率。同时,确保使用参数化查询防止SQL注入,并从环境变量中读取敏感信息以增强安全性。
218 1
|
4月前
|
机器学习/深度学习 JSON API
【Python奇迹】FastAPI框架大显神通:一键部署机器学习模型,让数据预测飞跃至Web舞台,震撼开启智能服务新纪元!
【8月更文挑战第16天】在数据驱动的时代,高效部署机器学习模型至关重要。FastAPI凭借其高性能与灵活性,成为搭建模型API的理想选择。本文详述了从环境准备、模型训练到使用FastAPI部署的全过程。首先,确保安装了Python及相关库(fastapi、uvicorn、scikit-learn)。接着,以线性回归为例,构建了一个预测房价的模型。通过定义FastAPI端点,实现了基于房屋大小预测价格的功能,并介绍了如何运行服务器及测试API。最终,用户可通过HTTP请求获取预测结果,极大地提升了模型的实用性和集成性。
284 1
|
4月前
|
API Python
Python FastAPI 获取 Neo4j 数据
Python FastAPI 获取 Neo4j 数据
45 0
|
7月前
|
JSON API 数据安全/隐私保护
如何使用Fastapi上传文件?先从请求体数据讲起
如何使用Fastapi上传文件?先从请求体数据讲起
220 2
|
JSON 数据格式 Python
FastAPI(45)- 返回响应数据的五种常见方式
FastAPI(45)- 返回响应数据的五种常见方式
1136 0
FastAPI(45)- 返回响应数据的五种常见方式
|
JSON API 数据安全/隐私保护
FastAPI(23)- 详解 Form,发送表单数据
FastAPI(23)- 详解 Form,发送表单数据
667 0
FastAPI(23)- 详解 Form,发送表单数据
FastAPI(15)- 声明请求示例数据(下)
FastAPI(15)- 声明请求示例数据(下)
218 0
FastAPI(15)- 声明请求示例数据(下)
|
JSON API 数据格式
FastAPI(15)- 声明请求示例数据(上)
FastAPI(15)- 声明请求示例数据(上)
217 0
FastAPI(15)- 声明请求示例数据(上)
|
存储 开发框架 JSON
FastAPI 学习之路(二十一)请求体 - 更新数据
FastAPI 学习之路(二十一)请求体 - 更新数据
FastAPI 学习之路(二十一)请求体 - 更新数据
|
NoSQL 测试技术 Redis
FastAPI(八十四)实战开发《在线课程学习系统》--接口测试(下)
FastAPI(八十四)实战开发《在线课程学习系统》--接口测试(下)
FastAPI(八十四)实战开发《在线课程学习系统》--接口测试(下)