系列文章:
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]
我們去獲取下

我們去更新下資料

我們去更新一個不存在的資料

更新部分資料時,可以在 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]
我們去看下去后的效果

更新部分資料小結
簡而言之,更新部分資料做法:
-
使用 PUT 也可以使用PATCH;
-
提取存盤的資料;
-
把資料放入 Pydantic 模型;
-
生成不含輸入模型默認值的 dict (使用 exclude_unset 引數);
-
只更新用戶設定過的值,不用模型中的默認值覆寫已存盤過的值,
-
為已存盤的模型創建副本,用接收的資料更新其屬性 (使用 update 引數),
-
把模型副本轉換為可存入資料庫的形式(比如,使用 jsonable_encoder),
-
這種方式與 Pydantic 模型的 .dict() 方法類似,但能確保把值轉換為適配 JSON 的資料型別,例如, 把 datetime 轉換為 str ,
-
把資料保存至資料庫;
-
回傳更新后的模型,
文章首發在公眾號,歡迎關注,

轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/323006.html
標籤:其他
上一篇:Bloom Filter演算法
