Python | FastAPIでAPI作成 ~その6:DELETEでデータ削除 & Pandas活用
- 2022.07.18
- FAST API

今回は前回の続きで、DELETEオプションを検証します。
前回の記事は以下から↓
目次
DELETEを使ってレコードを削除する
今回はレコードを削除するためのオプション「DELETE」を使います。

プログラム
前回のプログラムを改造します。
pandasを活用する
今までリスト型辞書でデータを扱っていましたが、データ分析でお世話になっている「Pandas」を使って、もう少し楽にデータ処理を作ってみたいと思います。
① import pandasの追加
pandasを利用するため記述します。
② df = pandas.json_normalize(User_list)
joson_normalize関数を用いてJsonデータをDataFrame型に変換します。
③@app.getの改造
return部分を「df.to_json(orient=’records’)」とします。
これにより、json形式で値が返ってきます。また、orient=’records’オプションも必須です。
④@app.postの改造
append部分を改造します。ignore_index=Trueとすることで、DataFrameのindexを振り直します。
また、今回グローバル変数として設定しているdfを更新するため、「global df」を記述します。
⑤@app.deleteの追加
ここが今回の要です。
DataFrameからデータを削除するため、df.drop関数を用います。
df = df.drop(df.index[df[“ID”]==u_id])
パスパラメータで渡された値と等しい行を削除するため、「df.index[df[“ID”]==u_id]」としています。
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} :ユーザの削除
#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 list(filter(lambda item : item['ID']==u_id, User_list))
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):
#User_list.append({"ID": user.ID,"Name":user.Name,"Class":user.Class})
#return User_list
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')
結果
では一通りの挙動を確認します。
GET /Users/

GET /Users/{ID}

POST (M006を追加)

DELETE(M003を削除)

一通りの挙動を確認する事ができました。
ではまた!
-
前の記事
Python | FastAPIでAPI作成 ~その5:POSTでデータ登録 2022.07.18
-
次の記事
Python | FastAPIでAPI作成 ~その7:PUTでデータ更新 2022.07.18