fastapi+mysql实现增删改查
说明:
我计划用python的fastapi框架,实现操作MySQL数据库的表,实现增删改查的操作,并且在postman里面测试
step1: 安装数据库依赖
pip install fastapi uvicorn pymysql
step2:C:\Users\Administrator\PycharmProjects\FastAPIProject\main.py
from fastapi import FastAPI, HTTPException, Body, Path
import pymysql.cursors
from typing import Optional, Dict
app = FastAPI()
# 数据库连接配置
DB_CONFIG = {'host': 'localhost','user': 'root','password': '123456','db': 'db_spring','charset': 'utf8mb4','cursorclass': pymysql.cursors.DictCursor
}
# 查询数据库的函数
def query_database(query: str, params=None):try:connection = pymysql.connect(**DB_CONFIG)with connection.cursor() as cursor:cursor.execute(query, params)result = cursor.fetchall()connection.close()return resultexcept Exception as e:raise HTTPException(status_code=500, detail=str(e))
# 查询表数据的 API 端点
@app.get("/query")
async def query_table(table_name: str):query = f"SELECT * FROM {table_name}"try:data = query_database(query)return {"status": "success", "data": data}except HTTPException as e:return {"status": "error", "message": e.detail}# 新增用户 (POST)
@app.post("/users")
async def create_user(user_data: Dict = Body(..., example={"name": "诸葛亮","email": "zhugeliang@shu.com","age": 54})
):try:# 检查邮箱唯一性check_query = "SELECT id FROM users WHERE email = %s"exist = query_database(check_query, (user_data["email"],))if exist:raise HTTPException(409, "邮箱已存在")# 执行插入操作insert_query = """INSERT INTO users (name, email, age)VALUES (%s, %s, %s)"""with pymysql.connect(**DB_CONFIG) as conn:with conn.cursor() as cursor:cursor.execute(insert_query, (user_data["name"],user_data["email"],user_data["age"]))new_id = cursor.lastrowidconn.commit()return {"status": "success", "id": new_id}except KeyError as e:raise HTTPException(400, f"缺失必要字段: {e}")# 更新用户 (PUT)
@app.put("/users/{user_id}")
async def update_user(user_id: int = Path(..., gt=0),update_data: Dict = Body(..., example={"name": "更新名称","age": 99})
):try:# 检查用户是否存在exist = query_database("SELECT id FROM users WHERE id = %s", (user_id,))if not exist:raise HTTPException(404, "用户不存在")# 动态生成更新语句set_clause = ", ".join([f"{k}=%s" for k in update_data.keys()])update_query = f"UPDATE users SET {set_clause} WHERE id = %s"with pymysql.connect(**DB_CONFIG) as conn:with conn.cursor() as cursor:cursor.execute(update_query, (*update_data.values(),user_id))conn.commit()return {"status": "success", "affected_rows": cursor.rowcount}except pymysql.err.IntegrityError:raise HTTPException(409, "邮箱冲突或数据约束失败")
# 删除用户 (DELETE)
@app.delete("/users/{user_id}")
async def delete_user(user_id: int = Path(..., gt=0)):try:with pymysql.connect(**DB_CONFIG) as conn:with conn.cursor() as cursor:cursor.execute("DELETE FROM users WHERE id = %s",(user_id,))conn.commit()if cursor.rowcount == 0:raise HTTPException(404, "用户不存在")return {"status": "success", "deleted_id": user_id}except pymysql.err.Error as e:raise HTTPException(500, f"数据库错误: {e}")
# 启动应用
if __name__ == "__main__":import uvicornuvicorn.run(app, host="0.0.0.0", port=8000)
step3:运行
C:\Users\Administrator\PycharmProjects\FastAPIProject\.venv\Scripts\python.exe -m uvicorn main:app --reload
INFO: Will watch for changes in these directories: ['C:\\Users\\Administrator\\PycharmProjects\\FastAPIProject']
INFO: Uvicorn running on http://127.0.0.1:8000 (Press CTRL+C to quit)
INFO: Started reloader process [12132] using StatReload
INFO: Started server process [2000]
INFO: Waiting for application startup.
INFO: Application startup complete.
INFO: 127.0.0.1:53269 - "DELETE /users/16 HTTP/1.1" 200 OK
在postman里面,测试验证成功
end
相关文章:
fastapi+mysql实现增删改查
说明: 我计划用python的fastapi框架,实现操作MySQL数据库的表,实现增删改查的操作,并且在postman里面测试 step1: 安装数据库依赖 pip install fastapi uvicorn pymysqlstep2:C:\Users\Administrator\PycharmProjects\FastAPIPro…...
ArcGIS Pro:轻松制作地震动画,洞察灾害动态
在当今的信息展示领域,动画因其直观、生动的特点,逐渐成为各类汇报、研究展示中的重要元素。 尤其是在地理信息领域,通过动画来展示动态的地理现象,能够让观众更清晰地理解数据背后所蕴含的信息。 地震作为一种突发性的自然灾害…...
Redis系列之慢查询分析与调优
Redis 慢查询分析与优化:提升性能的实战指南 Redis 作为一款高性能的内存数据库,因其快速的数据读写能力和灵活的数据结构,被广泛应用于缓存、消息队列、排行榜等多种业务场景。然而,随着业务规模的扩大和数据量的增加࿰…...
Linux下磁盘读写流
用户空间请求 系统调用:应用程序通过系统调用(如 read() 或 write())请求对文件或设备进行读写操作。 文件描述符:操作通过文件描述符进行,该描述符在应用程序打开文件时获得。 VFS(虚拟文件系统ÿ…...
MAVEN手动配置(阿里云)全教程
介于网上各种各样的MAVEN配置过程中方法大致相同却细节参差不齐,我总结了我遇见的一些问题,来完全的解决MAVEN手动配置的全过程,以及分享解决小毛病的经验。 所需材料: MAVEN3.9.9(下载适合自己的版本即可)…...
贪心算法一
> 作者:დ旧言~ > 座右铭:松树千年终是朽,槿花一日自为荣。 > 目标:了解什么是贪心算法,并且掌握贪心算法。 > 毒鸡汤:有些事情,总是不明白,所以我不会坚持。早安! >…...
计算机毕业设计Python+DeepSeek-R1大模型微博的话题博文及用户画像分析系统 微博舆情可视化(源码+ 文档+PPT+讲解)
温馨提示:文末有 CSDN 平台官方提供的学长联系方式的名片! 温馨提示:文末有 CSDN 平台官方提供的学长联系方式的名片! 温馨提示:文末有 CSDN 平台官方提供的学长联系方式的名片! 作者简介:Java领…...
Android Framework 常见面试题
以下是常见的 Android Framework 面试题,涵盖基础到高级知识点,帮助准备面试: 一、基础问题 Android 系统架构分层 描述 Android 系统的四层架构(Linux Kernel、Native、Framework、Application)及各层职责。 Zygote …...
绕过某书frida反调试检测 获取某宝支付参数
前言 在移动应用安全测试和研究过程中,我们经常需要使用Frida等工具对应用进行动态分析。然而,很多应用都实现了反调试和反注入机制,用来检测并阻止此类分析工具的使用。本文将分享如何使用Frida绕过某流行阅读应用(以下简称"某书",本次任务目的原本是需要找出…...
Secret Cow Code S
归纳编程学习的感悟, 记录奋斗路上的点滴, 希望能帮到一样刻苦的你! 如有不足欢迎指正! 共同学习交流! 🌎欢迎各位→点赞 👍+ 收藏⭐ + 留言📝 既然选择了远方,当不负青春,砥砺前行! 题目描述 奶牛们正在实验秘密代码,并设计了一种方法用于生成无限长度的字符…...
MyBatis - XML CRUD 其他查询
1. XML 配置文件 使用 MyBatis 操作数据库的方式有两种: 注解 (在注解中定义 SQL 语句)XML 配置文件 (在 XML 文件中定义 SQL 语句) 在上一篇博客中, 已经讲解了如何使用注解操作数据库, 本篇文章来讲解如何使用 XML 进行 MyBatis 开发. 使用 XML 的步骤, 和使用注解的步骤…...
牛客python蓝桥杯11-32(自用)
11 import os import sysdef huiwen(str):length len(str)# if length 0:# return -1result []for i in range(length-1): # 0 - length-2for j in range(i2,length1):# 取出从索引 i 到 j-1 的子串s str[i:j]# 正序倒序if s s[::-1]:result.append(len(s))if result…...
rabbitmq版本升级并部署高可用
RabbitMQ版本升级 先检查是否已经安装rabbitmq rpm -qa|grep rabbitmq|wc -l //如果结果是0,表示没有安装 rpm -e --nodeps $(rpm -qa|grep rabbitmq) //如安装了,则进行卸载 先检查是否已经安装erlang rpm -qa|grep erlang|wc -l //如果结果…...
Spring AI 1.0.0-M6 快速开始(一)
Spring AI 1.0.0-M6 入门一、存储库二、依赖管理完整maven 入门 Spring 是JAVA中我们经常使用的框架之一,Spring AI不断的发展迭代目前已经到M6版本据说上半年会出一个稳定版本。 本节提供了如何开始使用Spring AI的M6。 一、存储库 1.0 M6 -添加Spring存储库 需…...
数据集路径出错.yaml‘ images not found , missing path
方法一:删除settings.yaml 方法二:dataset_name.yaml改用绝对路径,如最后一张图 错误分析: dataset_name.yaml中的path的路径仅支持绝对路径,写相对路径就会搜索不到,使用settings.json中的路径࿰…...
win32汇编环境,对话框中使用树形视图示例二
;运行效果 ;win32汇编环境,对话框中使用树形视图示例二 ;得到树形视图控件Treeview的全路径字符串,这里的方法是由子项向父项挨个找的算法找齐路径 ;直接抄进RadAsm可编译运行。重要部分加备注。 ;下面为asm文件 ;>>>>>>>>>>>>>>&g…...
二维码(带背景图片或动态图)
原文链接:http://www.juzicode.com/archives/6377 桔子菌逛github的时候发现一个好玩的Python库,可以用来制作带背景图片或动态图的二维码,这个库在pypi上也有发布,可以直接通过pip安装: python -m pip install amzq…...
【连珠云弈】网页五子棋版项目测试报告
目录 一、项目背景 1.1、项目起源 1.2、市场需求 1.3、项目目标 二、项目功能 2.1 用户管理功能 2.2 游戏对战功能 三、测试报告 3.1.功能测试 编辑 3.1.1注册功能测试 解决bug: 测试总结: 3.1.2登录功能测试 测试总结: 3.…...
OpenCV计算摄影学(15)无缝克隆(Seamless Cloning)调整图像颜色的函数colorChange()
操作系统:ubuntu22.04 OpenCV版本:OpenCV4.9 IDE:Visual Studio Code 编程语言:C11 算法描述 cv::colorChange 是 OpenCV 中用于调整图像颜色的函数。它允许你通过乘以不同的系数来独立地改变输入图像中红色、绿色和蓝色通道的强度…...
AI视频领域的DeepSeek—阿里万相2.1图生视频
让我们一同深入探索万相 2.1 ,本文不仅介绍其文生图和文生视频的使用秘籍,还将手把手教你如何利用它实现图生视频。 如下为生成的视频效果(我录制的GIF动图) 如下为输入的图片 目录 1.阿里巴巴全面开源旗下视频生成模型万相2.1模…...
Unity中Stack<T>用法以及删除Stack<GameObject>的方法
Unity中Stack用法以及删除Stack的方法 介绍Stack<T>的APIStack<T> 常用方法创建和初始化 Stack<T>Push 和 Pop 操作Stack<T>遍历清空栈检查栈是否包含某个元素 栈的典型应用场景撤销操作深度优先搜索(DFS)注意事项 总结 介绍 因…...
用Python分割并高效处理PDF大文件
在处理大型PDF文件时,将它们分解成更小、更易于管理的块通常是有益的。这个过程称为分区,它可以提高处理效率,并使分析或操作文档变得更容易。在本文中,我们将讨论如何使用Python和为Unstructured.io库将PDF文件划分为更小的部分。…...
HarmonyOS Next~鸿蒙系统ArkCompiler跨平台编译技术的革新实践
HarmonyOS Next~鸿蒙系统ArkCompiler跨平台编译技术的革新实践 引言 在万物互联时代,操作系统对编译技术的需求已从单纯的代码转换演变为跨设备协同、高效资源调度与极致性能优化的综合挑战。华为鸿蒙系统(HarmonyOS)自主研发的ArkCompiler…...
RabbitMQ知识点
1.为什么需要消息队列? RabbitMQ体系结构 操作001:RabbitMQ安装 二、安装 # 拉取镜像 docker pull rabbitmq:3.13-management # -d 参数:后台运行 Docker 容器 # --name 参数:设置容器名称 # -p 参数:映射端口号&…...
2025-03-06 学习记录--C/C++-PTA 习题6-6 使用函数输出一个整数的逆序数
合抱之木,生于毫末;九层之台,起于累土;千里之行,始于足下。💪🏻 一、题目描述 ⭐️ 二、代码(C语言)⭐️ #include <stdio.h>int reverse( int number );int main…...
力扣132. 分割回文串 II
力扣132. 分割回文串 II 题目 题目解析及思路 题目要求返回将s切割成若干回文串的最少切割次数 对于子串s[j...i],若为回文串,则问题变为求s[0...j]的最少切割次数 因此可以考虑动态规划 对于问题s[j...i]是否为回文串,若s[i] s[j]则问…...
调研:如何实现智能分析助手(Agent)(AutoCoder、FastGPT、AutoGen、DataCopilot)
文章目录 调研:如何实现智能分析助手(Agent)(AutoCoder、FastGPT、AutoGen、DataCopilot)一、交互流程二、数据流程三、架构分类四、开源产品4.1 AutoCoder(知识库变体)4.2 FastGPT(…...
C# 简介以及与C、C++的区别
C#(发音为“C Sharp”)是一种由微软公司开发的面向对象的、类型安全的编程语言,是.NET框架的主要编程语言。C#最初是为了与Java竞争而设计的,因此在语法和设计原则上有许多相似之处。 起源与发展 C#诞生于2000年左右&#x…...
学习使用ESP8266进行MQTT通信并在网页上可视化显示
目录 一、工具 二、 流程 三、代码实现 设置MQTT服务器地址 设置服务器和端口号 连接MQTT服务器并订阅话题 回调处理函数 发布数据到话题 四、调试软件使用 打开MQTTx 添加话题 五、网页使用 一、工具 arduino ide esp8266/32单片机 lot物联网网页 MQTTx软件或者m…...
mysql进阶(三)
MySQL架构和存储引擎 1. MySQL架构 MySQL8.0服务器是由连接池、服务管理⼯具和公共组件、NoSQL接⼝、SQL接⼝、解析器、优化 器、缓存、存储引擎、⽂件系统组成。MySQL还为各种编程语⾔提供了⼀套⽤于外部程序访问服务器 的连接器。整体架构图如下所⽰: 2. 连接层 …...
