fastapi + aiomysql 实现增删改查

from fastapi import FastAPI, Depends, HTTPException
from aiomysql import create_pool
import aiomysql
import asyncio

app = FastAPI()

# 数据库配置信息
DB_CONFIG = {
    'host': '127.0.0.1',
    'port': 3306,
    'user': 'your_username',
    'password': 'your_password',
    'db': 'your_database',
}


# 创建数据库连接池
@app.on_event("startup")
async def startup():
    app.state.db_pool = await create_pool(**DB_CONFIG)


# 关闭数据库连接池
@app.on_event("shutdown")
async def shutdown():
    app.state.db_pool.close()
    await app.state.db_pool.wait_closed()


# 依赖项,用于从连接池中获取连接
async def get_db_connection():
    async with app.state.db_pool.acquire() as connection:
        async with connection.cursor() as cursor:
            yield cursor


# 批量插入数据
@app.post("/items/")
async def create_items(items: list[dict], cursor: aiomysql.Cursor = Depends(get_db_connection)):
    values = ', '.join(['(%s, %s)'] * len(items))
    args = [val for item in items for val in (item['name'], item['description'])]
    query = f"INSERT INTO items (name, description) VALUES {values}"
    await cursor.execute(query, args)
    await cursor.connection.commit()
    return {"status": "items created"}


# 批量删除数据
@app.delete("/items/")
async def delete_items(ids: list[int], cursor: aiomysql.Cursor = Depends(get_db_connection)):
    placeholders = ', '.join(['%s'] * len(ids))
    query = f"DELETE FROM items WHERE id IN ({placeholders})"
    await cursor.execute(query, ids)
    await cursor.connection.commit()
    return {"status": "items deleted"}


# 批量更新数据
@app.put("/items/")
async def update_items(items: list[dict], cursor: aiomysql.Cursor = Depends(get_db_connection)):
    updates = ', '.join(["%s = %s"] * len(items))
    args = [val for pair in items for val in (pair['id'], pair['description'])]
    query = f"UPDATE items SET description = CASE id {updates} END WHERE id IN (%s)"
    await cursor.execute(query, args + [tuple(pair['id'] for pair in items)])
    await cursor.connection.commit()
    return {"status": "items updated"}


if __name__ == "__main__":
    import uvicorn

    uvicorn.run(app, host="0.0.0.0", port=8000)

  • 6
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
FastAPI是一个基于Python的现代、快速(高性能)的Web框架,它具有简单易用、高效可靠的特点。而Neo4j是一个图数据库,它以图的方式存储和处理数据,适用于处理复杂的关系型数据。 结合FastAPI和Neo4j可以构建一个强大的Web应用程序,以下是一些关键的步骤和要点: 1. 安装FastAPI和Neo4j驱动:首先需要安装FastAPI和Neo4j的Python驱动,可以使用pip命令进行安装。 2. 连接Neo4j数据库:在FastAPI应用程序中,需要使用Neo4j的Python驱动来连接到Neo4j数据库。可以使用驱动提供的函数来建立连接,并指定数据库的地址、用户名和密码等信息。 3. 定义API路由:使用FastAPI的装饰器来定义API路由,指定HTTP方法和URL路径。可以在路由函数中编写业务逻辑,包括查询Neo4j数据库、处理请求参数等操作。 4. 查询Neo4j数据库:在路由函数中,可以使用Neo4j的Python驱动来执行Cypher查询语句,从数据库中获取数据。Cypher是Neo4j的查询语言,类似于SQL,但更适用于图数据库。 5. 处理请求和响应:FastAPI提供了强大的请求和响应处理功能,可以自动解析请求参数、验证数据、生成API文档等。可以使用FastAPI的数据模型和验证器来定义请求和响应的数据结构。 6. 异步支持:FastAPI支持异步处理请求,可以使用async/await关键字来编写异步代码。这对于处理大量并发请求或执行耗时操作非常有用。 7. 错误处理:在FastAPI应用程序中,可以使用异常处理器来捕获和处理错误。可以自定义异常类,并使用装饰器来指定异常处理函数。 8. 部署和扩展:FastAPI应用程序可以部署到各种Web服务器上,如Uvicorn、Gunicorn等。同时,可以使用FastAPI的插件和扩展来增加额外的功能,如身份验证、日志记录等。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值