fastapi mysql 开发restful 3

pip install mysql-connector-python pymysql

数据库链接

创建src目录,里面创建db.py 代码如下:

# 导入mysql.connector模块,该模块提供了与MySQL数据库进行连接和交互的功能。  
import mysql.connector  # 定义一个函数get_db_connection,该函数用于获取与MySQL数据库的连接。  
def get_db_connection():  # 使用mysql.connector.connect()方法创建一个数据库连接对象。  # 这个方法需要几个关键参数来指定如何连接到数据库。  connection = mysql.connector.connect(  # host参数指定数据库服务器的地址,这里使用'localhost'表示数据库服务器运行在本机上。  host='localhost',  # port参数指定数据库服务器监听的端口号,MySQL默认端口是3306。  port=3306,  # user参数指定用于连接到数据库的用户名,这里使用的是"root"用户。  user="root",  # password参数指定连接数据库的密码,出于安全考虑,实际使用时密码不应明文写在代码中。  password="XXXXXXX",  # database参数指定要连接到的数据库名称,这里使用的是名为"database"的数据库。  database="database"  )  # 返回创建的数据库连接对象,以供后续操作使用。  return connectiondef get_db():connection = get_db_connection()db = connection.cursor()try:yield dbfinally:db.close()connection.close()

main.py代码

# 导入FastAPI框架及相关依赖  
from fastapi import FastAPI, Depends, Header, HTTPException  
# 导入uvicorn,用于运行FastAPI应用  
import uvicorn  
# 从mysql.connector导入cursor,但这里可能存在问题,通常我们会导入connector然后从中获取cursor  
from mysql.connector import cursor  
# 导入自定义的数据库连接函数  
from src.db import get_db  # 初始化FastAPI应用实例  
app = FastAPI()  # 定义根路由,返回"Hello World"  
.get("/")  
async def root():  return {"message": "Hello World"}  # 定义带参数的路由,返回带有输入名字的问候语  
.get("/hello/{name}")  
async def say_hello(name: str):  return {"message": f"Hello {name}"}  # 定义关于信息的路由,返回应用名称和版本  
.get("/about")  
async def about():  """  项目信息  :return: 返回包含应用名称和版本信息的字典  """  return {  "app_name": "人工智能识别",  "app_version": "v0.0.1"  }  # 定义获取所有用户的路由,从数据库中查询并返回用户列表  
.get("/users/")  
async def get_users(db: cursor.MySQLCursor = Depends(get_db)):  query = "SELECT * FROM view_set"  db.execute(query)  result = db.fetchall()  if result:  return {"users": result}  else:  return {"error": "User not found"}  # 定义根据用户ID获取单个用户的路由  
.get("/users/{user_id}")  
async def get_user(user_id: int,  db: cursor.MySQLCursor = Depends(get_db)):  query = "SELECT * FROM view_set WHERE id = %s"  db.execute(query, (user_id,))  result = db.fetchall()  if result:  return {"user_id": result[0][0], "username": result[0][1]}  else:  return {"error": "User not found"}  # 定义插入用户的路由,但路由名称可能应该为/add_user/或其他更有意义的名称  
.get("/user_name/{user_name}")  
async def insert_user(user_name: str,  db: cursor.MySQLCursor = Depends(get_db)):  query = "INSERT INTO view_set (name) VALUES (%s)"  db.execute(query, (user_name,))  # 注意:通常在执行INSERT操作后,我们不需要调用fetchone(),因为INSERT不返回结果集  # result = db.fetchone()  # 这行代码是多余的  db.execute("COMMIT")  # 注意:这里可能存在问题,通常我们不会在每个查询后都执行COMMIT,而是在适当的时候  return {"user_name": user_name}  # 主程序入口  
if __name__ == "__main__":  # 使用uvicorn运行FastAPI应用  uvicorn.run(app, host="0.0.0.0", port=8000)  # 另一种运行方式,使用命令行参数--reload实现热重载  # uvicorn main:app --reload

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/675102.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

二分算法--模板及原理总结

二分答案 首先我们看这个图: 我们需要二分的答案就是这个临界点x。 什么情况下可以使用二分呢: 具有单调性(单调递增,单调递减),二段性(整个区间一分为二,一段区间满足,一…

为什么许多年轻人不喜欢回农村过年了?

为什么许多年轻人不喜欢回农村过年了? 随着时代的变迁和社会的发展,越来越多的年轻人选择在春节期间留在城市,而不是回到农村老家过年。这一现象引起了人们的关注和思考:为什么许多年轻人不喜欢回农村过年了? 首先&a…

全栈笔记_插件篇(用Volar替换Vuter)

Volar与Vuter的区别 TS支持:Volar和Vuter是2个独立的插件,都是为.vue单文件组件提供代码高亮以及语法支持,但是Vuter对ts的支持并不友好。唯一根标签:Volar 不限制是否唯一根标签,vuter 则会报错 The template root r…

史上最“昂贵”的漏洞

阿丽亚娜 5 号”事故 欧洲航天局“阿丽亚娜 5 号”运载火箭在 1996 年 6 月 4 日首次发射时发生了事故。火箭在飞行的第 40 秒由于软件错误而解体并爆炸,该软件直接沿用了以前“阿丽亚娜 4 号”火箭的软件,且未在新环境中进行测试。 此次事故导致四颗卫…

Qt网络编程-QTcpServer的封装

简单封装Tcp服务器类&#xff0c;将QTcpServer移入线程 头文件&#xff1a; #ifndef TCPSERVER_H #define TCPSERVER_H#include <QObject>class QTcpSocket; class QTcpServer; class QThread; class TcpServer : public QObject {Q_OBJECT public:explicit TcpServer(…

SpringBoot响应式编程教程-WebFlux

SpringBoot响应式编程教程-WebFlux 前言正文一、Reactor1、核心概念2、核心特性 二、Spring Webflux与springmvc的组件对比 三、R2DBC 结语 前言 最近有个项目需要用到响应式编程&#xff0c;一开始还是很懵的&#xff0c;以为是网页的自适应&#xff0c;通过部分文章的学习&a…

【MIMO】

MIMO技术入门 1.简介 MIMO(多入多出):多天线技术。 注意&#xff1a;此处的多天线&#xff0c;并不是有多个天线板&#xff0c;对基站来讲指天线有多套振子&#xff08;每一套振子都可以看成一个独立的天线&#xff09;。 4G 8天线&#xff1b;5G 64T64R&#xff1b;不仅基站…

[NOIP1998 普及组] 幂次方 题解 含源码

[NOIP1998 普及组] 幂次方 题目描述 任何一个正整数都可以用 2 2 2 的幂次方表示。例如 $13727232^0 $。 同时约定次方用括号来表示&#xff0c;即 a b a^b ab 可表示为 a ( b ) a(b) a(b)。 由此可知&#xff0c; 137 137 137 可表示为 2 ( 7 ) 2 ( 3 ) 2 ( 0 ) 2(7…

什么是VPS服务器技术

VPS就是虚拟私有服务器&#xff0c;那VPS服务器技术具体是包含哪些&#xff1f;什么是VPS服务器技术&#xff1f; VPS可以通过虚拟化技术将一台物理服务器划分成多个虚拟服务器&#xff0c;并且每个虚拟服务器都有着属于自己的独立配置&#xff0c;是多个用户拥有着属于自己的资…

JavaScript valueOf() 方法详解

valueOf() valueOf() 方法通常由 JavaScript 在后台自动调用&#xff0c;并不显式地出现在代码中。 所有主要浏览器都支持valueOf()。 Number对象 valueOf() 方法可以返回数字的原始值。 语法&#xff1a; number.valueOf() // 返回一个数的原始值返回一个 Number 对象的…

【模板初阶】

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 文章目录 前言 1. 泛型编程 2. 函数模板 2.1 函数模板概念 2.2 函数模板格式 2.3 函数模板的原理 2.4 函数模板的实例化 2.5 模板参数的匹配原则 3. 类模板 3.1 类模板的定义…

FPGA_工程_基于Rom的VGA图像显示

一 工程框图 框图中&#xff0c;CLK_in&#xff0c;Vga_ctrl&#xff0c;Vga_pic模块已有&#xff0c;只需要对顶层模块进行修改&#xff0c;并将rom ip例化添加到Vga_pic模块的.v文件中&#xff0c;对Vga_pic的.v文件进行一定修改。 二 理论补充 显示图像的方法&#xff1a;…

Mac 版 Excel 和 Windows 版 Excel的区别

Excel是一款由微软公司开发的电子表格程序&#xff0c;广泛应用于数据处理、分析和可视化等领域。它提供了丰富的功能和工具&#xff0c;包括公式、函数、图表和数据透视表等&#xff0c;帮助用户高效地处理和管理大量数据。同时&#xff0c;Excel还支持与其他Office应用程序的…

CSS中可继承与不可继承属性有哪些

一、无继承性的属性 1.display&#xff1a;规定元素应该生成的框的类型 属性值作用none元素不显示&#xff0c;并且会从文档流中移除。block块类型。默认宽度为父元素宽度&#xff0c;可设置宽高&#xff0c;换行显示。inline行内元素类型。默认宽度为内容宽度&#xff0c;不…

docker安装etherpad文档系统

效果 安装 1.创建并进入目录 mkdir -p /opt/etherpad cd /opt/etherpad 2.修改目录权限 chmod -R 777 /opt/etherpad 3.创建并启动容器 docker run -d --name etherpad --restart always -p 10054:9001 -v /opt/etherpad/data:/opt/etherpad-lite/var etherpad/etherpad:la…

【Java数据结构】ArrayList和LinkedList的遍历

一&#xff1a;ArrayList的遍历 import java.util.ArrayList; import java.util.Iterator; import java.util.List;/*** ArrayList的遍历*/ public class Test {public static void main(String[] args) {List<Integer> list new ArrayList<>();list.add(5);list…

XGB-4: 学习排序

概述 在信息检索的背景下&#xff0c;学习排序的目标是训练一个模型&#xff0c;将一组查询结果排列成有序列表[1]。对于监督学习排序&#xff0c;预测器是以特征矩阵编码的样本文档&#xff0c;标签是每个样本的相关性程度。相关性程度可以是多级&#xff08;分级&#xff09…

【ASP.NET Core 基础知识】--部署和维护--部署ASP.NET Core应用程序

一、部署准备 1.1 打包应用程序 打包应用程序是将ASP.NET Core应用程序准备好以便于部署到目标环境的关键步骤之一。在本文中&#xff0c;我们将从编译代码、收集依赖项和设置配置三个方面详细讲解如何打包ASP.NET Core应用程序&#xff0c;以确保在部署过程中的顺利进行。 编…

win32编程系统BUG(Win32 API中的WM_SETTEXT消息)

由于频繁使用Win32 API中的WM_SETTEXT消息&#xff0c;导致内存占用直线上升。 暂未找到有效解决方案。

HCIA--OSPF实验

1.划分网段&#xff0c;子网划分已完成&#xff1b;接口配置&#xff1a; AR1配置 &#xff1a; [Huawei]int g0/0/0 [Huawei-GigabitEthernet0/0/0]ip add 172.16.64.1 20 [Huawei-GigabitEthernet0/0/0]qu [Huawei]int l0 [Huawei-LoopBack0]ip add 172.16.80.1 20AR2配置…