Python使用fastapi快速編寫一個增刪改查的接口
python用fastapi快速寫一個增刪改查的接口
from fastapi import FastAPI, HTTPException
from pydantic import BaseModel
from typing import Dict
app = FastAPI()
# Mock database
db = {}
# Model for the data
class Item(BaseModel):
name: str
description: str
# Create operation
@app.post("/items/")
def create_item(item: Item):
if item.name in db:
raise HTTPException(status_code=400, detail="Item already exists")
db[item.name] = item.description
return {"message": "Item created successfully"}
# Read operation
@app.get("/items/{name}")
def read_item(name: str):
if name not in db:
raise HTTPException(status_code=404, detail="Item not found")
return {"name": name, "description": db[name]}
# Update operation
@app.put("/items/{name}")
def update_item(name: str, item: Item):
if name not in db:
raise HTTPException(status_code=404, detail="Item not found")
db[name] = item.description
return {"message": "Item updated successfully"}
# Delete operation
@app.delete("/items/{name}")
def delete_item(name: str):
if name not in db:
raise HTTPException(status_code=404, detail="Item not found")
del db[name]
return {"message": "Item deleted successfully"}這段代碼設置了一個FastAPI應用程序,其中包含用于創(chuàng)建、讀取、更新和刪除物品的端點。數據以簡單的內存數據庫形式存儲在字典(db)中。您可以使用諸如curl、Postman或任何其他HTTP客戶端之類的工具來測試這些端點。
方法補充
除了上文的方法,小編還為大家整理了其他FastAPI實現高效的增刪改查操作的方法,希望對大家有所幫助
環(huán)境搭建
在開始之前,請確保你的環(huán)境中安裝了Python 3.6+和pip。使用以下命令安裝FastAPI和Uvicorn,Uvicorn是一個輕量級的ASGI服務器。
pip install fastapi uvicorn
快速啟動
創(chuàng)建一個main.py文件,并寫入以下代碼來啟動一個簡單的FastAPI應用:
from fastapi import FastAPI
app = FastAPI()
@app.get("/")
async def read_root():
return {"Hello": "World"}
運行服務器:
uvicorn main:app --reload
打開瀏覽器訪問http://127.0.0.1:8000/,你將看到返回的JSON響應。
定義數據模型
在實現CRUD操作之前,需要定義數據模型。在models.py文件中,定義一個Pydantic模型,用于請求和響應數據的驗證。
from pydantic import BaseModel
# 創(chuàng)建一個Item模型
class Item(BaseModel):
id: int
name: str
description: str = None
price: float
tax: float = None
創(chuàng)建CRUD操作
在crud.py文件中,實現CRUD操作的函數。這里簡單地使用一個字典來存儲數據,實際應用中應該使用數據庫。
from models import Item
items = {}
def create_item(item_id: int, item: Item):
items[item_id] = item
return items[item_id]
def read_item(item_id: int):
return items.get(item_id)
def update_item(item_id: int, item: Item):
if item_id in items:
items[item_id] = item
return items[item_id]
return None
def delete_item(item_id: int):
if item_id in items:
del items[item_id]
return True
return False
實現API端點
在main.py中,將使用CRUD操作函數來實現API端點。
from fastapi import FastAPI, HTTPException
from models import Item
from crud import create_item, read_item, update_item, delete_item
app = FastAPI()
# 創(chuàng)建Item
@app.post("/items/{item_id}")
async def create(item_id: int, item: Item):
return create_item(item_id, item)
# 讀取Item
@app.get("/items/{item_id}")
async def read(item_id: int):
item = read_item(item_id)
if item is None:
raise HTTPException(status_code=404, detail="Item not found")
return item
# 更新Item
@app.put("/items/{item_id}")
async def update(item_id: int, item: Item):
updated_item = update_item(item_id, item)
if updated_item is None:
raise HTTPException(status_code=404, detail="Item not found")
return updated_item
# 刪除Item
@app.delete("/items/{item_id}")
async def delete(item_id: int):
if not delete_item(item_id):
raise HTTPException(status_code=404, detail="Item not found")
return {"detail": "Item deleted"}
測試API
我們可以使用FastAPI提供的API文檔來測試我們的接口。重新運行服務器:
uvicorn main:app --reload
轉到http://127.0.0.1:8000/docs,你將看到Swagger UI,一個自動生成的交互式API文檔,你可以在這里測試你的API端點。
進階:使用數據庫
為了讓CRUD操作更加實際,我們將使用SQLite數據庫來存儲數據。首先,我們需要安裝databases和sqlalchemy。
pip install databases sqlalchemy
接下來,在database.py文件中設置數據庫連接和表:
import databases
import sqlalchemy
from sqlalchemy import create_engine, MetaData, Table, Column, Integer, String, Float
DATABASE_URL = "sqlite:///./test.db"
database = databases.Database(DATABASE_URL)
metadata = MetaData()
items = Table(
"items",
metadata,
Column("id", Integer, primary_key=True),
Column("name", String(50)),
Column("description", String(50)),
Column("price", Float),
Column("tax", Float, default=None)
)
engine = create_engine(DATABASE_URL)
metadata.create_all(engine)
在crud.py中,我們將函數更新為使用數據庫:
from models import Item
from database import database, items
async def create_item(item_id: int, item: Item):
query = items.insert().values(id=item_id, **item.dict())
last_record_id = await database.execute(query)
return {**item.dict(), "id": last_record_id}
async def read_item(item_id: int):
query = items.select().where(items.c.id == item_id)
return await database.fetch_one(query)
async def update_item(item_id: int, item: Item):
query = items.update().where(items.c.id == item_id).values(**item.dict())
await database.execute(query)
return await read_item(item_id)
async def delete_item(item_id: int):
query = items.delete().where(items.c.id == item_id)
return await database.execute(query) > 0
最后,需要在main.py中啟動和關閉數據庫連接:
from fastapi import FastAPI, HTTPException
from models import Item
from crud import create_item, read_item, update_item, delete_item
from database import database
app = FastAPI()
@app.on_event("startup")
async def startup():
await database.connect()
@app.on_event("shutdown")
async def shutdown():
await database.disconnect()
# 其余的API端點保持不變
到此這篇關于Python使用fastapi快速編寫一個增刪改查的接口的文章就介紹到這了,更多相關Python fastapi增刪改查內容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!
相關文章
關于Pycharm配置翻譯插件Translation報錯更新TTK失敗不能使用的問題
這篇文章主要介紹了關于Pycharm配置翻譯插件Translation報錯更新TTK失敗不能使用的問題,本文通過圖文并茂的形式給大家分享解決方案,需要的朋友可以參考下2022-04-04
python中requests使用代理proxies方法介紹
這篇文章主要介紹了python中requests使用代理proxies方法介紹,具有一定參考價值,需要的朋友可以了解下。2017-10-10
Python編程scoketServer實現多線程同步實例代碼
這篇文章主要介紹了Python編程scoketServer實現多線程同步實例代碼,小編覺得還是挺不錯的,具有一定借鑒價值,需要的朋友可以參考下2018-01-01

