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应用程序,其中包含用于创建、读取、更新和删除物品的端点。数据以简单的内存数据库形式存储在字典(db)中。您可以使用诸如curl、postman或任何其他http客户端之类的工具来测试这些端点。
方法补充
除了上文的方法,小编还为大家整理了其他fastapi实现高效的增删改查操作的方法,希望对大家有所帮助
环境搭建
在开始之前,请确保你的环境中安装了python 3.6+和pip。使用以下命令安装fastapi和uvicorn,uvicorn是一个轻量级的asgi服务器。
pip install fastapi uvicorn
快速启动
创建一个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
# 创建一个item模型
class item(basemodel):
id: int
name: str
description: str = none
price: float
tax: float = none
创建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()
# 创建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增删改查内容请搜索代码网以前的文章或继续浏览下面的相关文章希望大家以后多多支持代码网!
发表评论