当前位置: 代码网 > it编程>前端脚本>Python > Python使用fastapi快速编写一个增删改查的接口

Python使用fastapi快速编写一个增删改查的接口

2024年05月15日 Python 我要评论
python用fastapi快速写一个增删改查的接口from fastapi import fastapi, httpexceptionfrom pydantic import basemodelfr

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增删改查内容请搜索代码网以前的文章或继续浏览下面的相关文章希望大家以后多多支持代码网!

(0)

相关文章:

版权声明:本文内容由互联网用户贡献,该文观点仅代表作者本人。本站仅提供信息存储服务,不拥有所有权,不承担相关法律责任。 如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 2386932994@qq.com 举报,一经查实将立刻删除。

发表评论

验证码:
Copyright © 2017-2025  代码网 保留所有权利. 粤ICP备2024248653号
站长QQ:2386932994 | 联系邮箱:2386932994@qq.com