Python | FastAPIでAPI作成 ~その7:PUTでデータ更新
- 2022.07.18
- FAST API
前回の続きです。今まではデータを扱う上での基本となる「検索(GET)」「登録(POST)」「削除(DELETE)」を学びました。
今回は「更新(PUT)」です。
目次
PUTを使ってデータを更新する
M003のClassを「B→E」に更新したいと思います。
プログラム
前回作成したプログラムを改造しています。
@app.put(“/Users/{u_id}”)の追加
今回は{u_id}で指定したIDのClassを更新します。
・global df でグローバル変数を宣言
・df.lo/c[df[df[“ID”]==u_id].index, “Class”] = user.Class
→ df.locで特定のカラムのみ更新します。
・df = df
→ ローカル変数の値をグローバル変数に代入します。
・return df.to_json(orient=’records’)
→更新結果を返します。
from fastapi import FastAPI
from pydantic import BaseModel
import pandas
class Item(BaseModel):
ID: str
Name: str
Class: str
app = FastAPI() #インスタンスを作成
User_list =[
{"ID":"M001","Name":"Takashi","Class":"A"},
{"ID":"M002","Name":"Hanako","Class":"A"},
{"ID":"M003","Name":"Hiroshi","Class":"B"},
{"ID":"M004","Name":"Kyoko","Class":"B"},
]
df = pandas.json_normalize(User_list)
# Get /Users/ : 全件取得
# Get /Users/{ID} :特定のIDのみ取得
# POST /Users/ :ユーザの登録
# DELETE /Users/{ID} :ユーザの削除
# PUT /Users/ :ユーザの更新
#curl http://localhost:8000/Users/
@app.get("/Users/")
async def users():
#return User_list
return df.to_json(orient='records')
#curl http://localhost:8000/Users/{ID}
@app.get("/Users/{u_id}")
async def users(u_id:str):
return df[df['ID']==u_id].to_json(orient='records')
#curl -X POST -H "accept: application/json" -H "Content-Type: application/json" -d "{\"ID\":\"M005\", \"Name\":\"Aya\", \"Class\":\"C\"}," http://localhost:8000/Users/
@app.post("/Users/")
async def users(user: Item):
global df
df = df.append({"ID": user.ID,"Name":user.Name,"Class":user.Class}, ignore_index=True)
return df.to_json(orient='records')
#curl -X DELETE -H "accept: application/json" http://localhost:8000/Users/M003
@app.delete("/Users/{u_id}")
async def users(u_id:str):
global df
df = df.drop(df.index[df["ID"]==u_id])
return df.to_json(orient='records')
#curl -X PUT -H "accept: application/json" -H "Content-Type: application/json" -d "{\"ID\":\"\", \"Name\":\"\", \"Class\":\"E\"}" http://localhost:8000/Users/M003
@app.put("/Users/{u_id}")
async def users(u_id:str, user: Item):
global df
df.loc[df[df["ID"]==u_id].index, "Class"] = user.Class
df = df
return df.to_json(orient='records')
結果
では最後に結果を確認します。
/Users/ で全件取得
curlで更新を掛ける
以下をコマンドプロンプトから実行します。
curl -X PUT -H “accept: application/json” -H “Content-Type: application/json” -d “{\”ID\”:\”\”, \”Name\”:\”\”, \”Class\”:\”E\”}” http://localhost:8000/Users/M003
確かに 対象のユーザ「M003」のClassが「E」に変わっていることが分かります。
以上です!
-
前の記事
Python | FastAPIでAPI作成 ~その6:DELETEでデータ削除 & Pandas活用 2022.07.18
-
次の記事
Python | FastAPIでAPI作成 ~その8:データベース(SQLite3)と連携 2022.07.19