当前位置: 首页 > news >正文

FastAPI中的数据库应用介绍


FastAPI中的数据库应用介绍

FastAPI 是一个高性能和易用的日现应用框架,在构建数据库操作时同样具备高效性和完善性。本文将分为初级和高级应用,帮助你熟练从基础到高级的数据库操作。


一、初级应用

1.安装和配置

FastAPI 通常搭配 ORM 工具来操作数据库,最常用的 ORM 是 SQLAlchemyTortoise-ORM。下面以 SQLAlchemy 举例:

安装相关包

先通过 pip 安装必要包:

pip install fastapi[all] sqlalchemy mysql-connector-python
  • mysql-connector-python: 用于操作 MySQL 数据库。
配置数据库

创建一个文件进行配置:

# database.py
from sqlalchemy.ext.declarative import declarative_base
from sqlalchemy import create_engine
from sqlalchemy.orm import sessionmakerDATABASE_URL = "mysql+mysqlconnector://username:password@localhost/dbname"engine = create_engine(DATABASE_URL, echo=True)
SessionLocal = sessionmaker(autocommit=False, autoflush=False, bind=engine)
Base = declarative_base()

2. 创建数据表

创建数据表模型:

# models.py
from sqlalchemy import Column, Integer, String
from database import Baseclass User(Base):__tablename__ = "users"id = Column(Integer, primary_key=True, index=True)name = Column(String, index=True)email = Column(String, unique=True, index=True)

3. CRUD 操作

在 FastAPI 中设置 CRUD 操作功能:

创建文件
# crud.py
from sqlalchemy.orm import Session
from models import User# Create
def create_user(db: Session, name: str, email: str):db_user = User(name=name, email=email)db.add(db_user)db.commit()db.refresh(db_user)return db_user# Read
def get_user(db: Session, user_id: int):return db.query(User).filter(User.id == user_id).first()# Delete
def delete_user(db: Session, user_id: int):db_user = db.query(User).filter(User.id == user_id).first()if db_user:db.delete(db_user)db.commit()
绑定到 API 结构

为每个操作创建 API 结构:

# main.py
from fastapi import FastAPI, Depends
from sqlalchemy.orm import Session
from database import SessionLocal, engine
from models import Base
from crud import create_user, get_userBase.metadata.create_all(bind=engine)app = FastAPI()def get_db():db = SessionLocal()try:yield dbfinally:db.close()@app.post("/users/")
def create_new_user(name: str, email: str, db: Session = Depends(get_db)):return create_user(db, name, email)@app.get("/users/{user_id}")
def read_user(user_id: int, db: Session = Depends(get_db)):return get_user(db, user_id)

二、高级应用

1. 添加非阻塞操作

FastAPI 支持非阻塞操作,例如用 databases 完现非阻塞操作。

# async_database.py
from databases import DatabaseDATABASE_URL = "mysql+mysqlconnector://username:password@localhost/dbname"database = Database(DATABASE_URL)

在主要 API 中使用非阻塞操作:

@app.on_event("startup")
async def startup():await database.connect()@app.on_event("shutdown")
async def shutdown():await database.disconnect()@app.get("/users/async/{user_id}")
async def get_user_async(user_id: int):query = "SELECT * FROM users WHERE id = :user_id"return await database.fetch_one(query, values={"user_id": user_id})

2. 使用 Alembic 管理数据库模型迭代

Alembic 是一个用于管理数据库模型改动和迭代的工具。安装:

pip install alembic

创建 Alembic 配置:

alembic init alembic

配置 alembic.ini 文件,指定数据库连接信息:

sqlalchemy.url = mysql+mysqlconnector://username:password@localhost/dbname

创建数据表模型改动:

alembic revision --autogenerate -m "Add new user table"
alembic upgrade head

3. 实现处理更复杂的操作流

在实际项目中,层级分明是很重要的:

  • 数据库的 DAO (Data Access Object)。
  • 优化的非阻塞操作。
  • 使用 Redis 和以缓存改善性能。

相关文章:

FastAPI中的数据库应用介绍

FastAPI中的数据库应用介绍 FastAPI 是一个高性能和易用的日现应用框架,在构建数据库操作时同样具备高效性和完善性。本文将分为初级和高级应用,帮助你熟练从基础到高级的数据库操作。 一、初级应用 1.安装和配置 FastAPI 通常搭配 ORM 工具来操作数据…...

wordpres当前分类调用父分类的名称和链接

在WordPress中&#xff0c;如果你想在当前分类页面调用并显示父分类的名称和链接&#xff0c;你可以使用以下代码片段&#xff1a; <?php // 获取当前分类的ID $cat_id get_queried_object_id();// 获取当前分类的父分类ID $parent_id get_term($cat_id, category)->…...

自动驾驶3D目标检测综述(六)

停更了好久终于回来了&#xff08;其实是因为博主去备考期末了hh&#xff09; 这一篇接着&#xff08;五&#xff09;的第七章开始讲述第八章的内容。第八章主要介绍的是三维目标检测的高效标签。 目录 第八章 三维目标检测高效标签 一、域适应 &#xff08;一&#xff09;…...

RDFS—RDF模型属性扩展解析

目录 前言1. 什么是RDFS&#xff1f;1.1 RDFS的核心概念1.2 RDFS与RDF的区别 2. RDFS的基础概念2.1 类&#xff08;Class&#xff09;2.2 属性&#xff08;Property&#xff09;2.3 关系&#xff08;Relation&#xff09;2.4 定义域&#xff08;Domain&#xff09;2.5 值域&…...

应用层2——FTP文件传输协议

FTP文件传输协议 FTP文件传输协议 TFTP简单文件传输协议 提供不同种类主机系统&#xff08;软硬件体系不同&#xff09;之间的文件传输能力 即屏蔽底层操作系统的差异 FTP以C/S模式进行服务,FTP使用TCP协议传输 FTP服务器进程&#xff1a; 一个主进程&#xff0c;n个从属进…...

《探索PyTorch计算机视觉:原理、应用与实践》

《探索PyTorch计算机视觉&#xff1a;原理、应用与实践》 一、PyTorch 与计算机视觉的奇妙相遇二、核心概念解析&#xff08;一&#xff09;张量&#xff1a;计算机视觉的数据基石&#xff08;二&#xff09;神经网络&#xff1a;视觉任务的智慧大脑&#xff08;三&#xff09;…...

【Linux学习五】时间日期指令与查找指令

目录 一、时间日期指令 1.1 显示日期 1.2 设置日期 1.3 日历指令 二、搜索查找类指令 2.1 find指令 2.2 locate指令 2.3 grep指令和管道符号| 一、时间日期指令 1.1 显示日期 date &#xff08;功能描述&#xff1a;显示当前时间&#xff09;date %Y&#xff0…...

程序环境和预处理

程序环境和预处理 1.程序环境1.1如何从test.c到test.exe1.2.翻译环境1.2.1翻译过程1.2.2详细过程 1.3.运行环境 2.预处理2.1 预定义符号2.2 define2.2.1 define定义标识符2.2.2 define定义宏2.2.3 带副作用的宏参数2.2.4 宏和函数的对比 2.3 #undef2.4 命令行定义2.5 条件编译2…...

SpringCloud整合skywalking实现链路追踪和日志采集

1.部署skywalking https://blog.csdn.net/qq_40942490/article/details/144701194 2.添加依赖 <!-- 日志采集 --><dependency><groupId>org.apache.skywalking</groupId><artifactId>apm-toolkit-logback-1.x</artifactId><version&g…...

【Java】面试题 并发安全 (2)

文章目录 可重入锁&#xff08;ReentrantLock&#xff09;知识总结1. 可重入锁概念与特点2. 基本语法与使用注意事项3. 底层实现原理4. 面试回答要点 synchronized与lock的区别死锁相关面试题讲解死锁产生的四个条件ConcurrentHashMap2. JDK1.7的ConcurrentHashMap结构添加数据…...

面试场景题系列:设计URL短链

1.场景需求界定 1.缩短URL&#xff1a;提供一个长URL&#xff0c;返回一个短很多的URL。 2.重定向URL&#xff1a;提供一个缩短了的URL&#xff0c;重定向到原URL。 3.高可用、可扩展性和容错性考量。 •写操作&#xff1a;每天生成1亿个URL。 •每秒的写操作数&#xff1a…...

C++模版

一.函数模版 1.定义&#xff1a;用来产生一组重组的函数&#xff0c;这些函数具有共同的逻辑和操作步骤&#xff0c;但其输入和输出的数据类型可以不一样 2.模版的语法形式 3.例子&#xff1a; template<typename T> T maximum(T value1, T value2, T value3) {T maxi…...

【zookeeper核心源码解析】第二课:俯瞰QuorumPeer启动核心流程,实现选举关键流程

系列文章目录 【zookeeper核心源码解析】第一课&#xff1a;zk启动类核心流程序列图 【zookeeper核心源码解析】第二课&#xff1a;俯瞰QuorumPeer启动核心流程&#xff0c;实现选举关键流程 【zookeeper核心源码解析】第三课&#xff1a;leader与follower何时开始同步&#…...

深度学习中的参数初始化

深度学习中的参数初始化主要是指初始化神经网络中的权重和偏置。权重和偏置通常分开初始化&#xff0c;偏置通常初始化为零或较小的常数值。 没有一种万能的初始化技术&#xff0c;因为最佳初始化可能因具体架构和要解决的问题而异。因此&#xff0c;尝试不同的初始化技术以了解…...

构建全志 T113 Tina SDK

1、环境配置&#xff1a; 准备一个 Ubuntu 系统&#xff0c;可以是 WSL&#xff0c;虚拟机等&#xff0c;建议版本是 20.04。 1.1、安装必要的软件 进入系统后&#xff0c;输入下方命令安装需要的工具 &#xff1a; sudo apt update -y sudo apt full-upgrade -y sudo apt i…...

yolov5 yolov6 yolov7 yolov8 yolov9目标检测、目标分类 目标切割 性能对比

文章目录 YOLOv1-YOLOv8之间的对比如下表所示&#xff1a;一、YOLO算法的核心思想1. YOLO系列算法的步骤2. Backbone、Neck和Head 二、YOLO系列的算法1.1 模型介绍1.2 网络结构1.3 实现细节1.4 性能表现 2. YOLOv2&#xff08;2016&#xff09;2.1 改进部分2.2 网络结构 3. YOL…...

经典问题——华测

1、没有 token 的情况下&#xff0c;接口的自动化测试可以通过哪些方式处理&#xff1f; 确认接口是否有其他认证机制&#xff1a; 如果使用的是 Basic Auth、Session ID 等传统方式&#xff0c;可以在请求中直接传递相关认证信息&#xff08;如用户名和密码、Cookie 等&…...

【视觉惯性SLAM:十二、ORB-SLAM2:局部建图线程】

局部建图线程是ORB-SLAM2的核心模块之一&#xff0c;其主要任务是以局部关键帧为中心&#xff0c;维护和优化局部地图&#xff0c;并不断生成新的地图点&#xff0c;使得地图能够逐渐扩展和保持鲁棒性。以下将从具体的几个方面介绍ORB-SLAM2中的局部建图线程&#xff0c;包括处…...

Spring Boot对访问密钥加解密——HMAC-SHA256

HMAC-SHA256 简介 HMAC-SHA256 是一种基于 哈希函数 的消息认证码&#xff08;Message Authentication Code, MAC&#xff09;&#xff0c;它结合了哈希算法&#xff08;如 SHA-256&#xff09;和一个密钥&#xff0c;用于验证消息的完整性和真实性。 HMAC 是 “Hash-based M…...

Linux高级--2.4.2 linux TCP 系列操作函数 -- 深层理解

一、操作函数简介 在 Linux 中&#xff0c;TCP&#xff08;传输控制协议&#xff09;操作涉及多种系统调用和函数&#xff0c;通常用来创建套接字、连接、发送/接收数据、关闭连接等。以下是一些常用的 TCP 操作函数和它们的简要说明&#xff1a; 1. socket() 函数原型: int…...

小程序租赁系统开发指南与实现策略

内容概要 在如今这个快节奏的时代&#xff0c;小程序租赁系统的开发正逐渐成为许多商家提升服务质量与效率的重要选择。在设计这样一个系统时&#xff0c;首先要明白它的核心目标&#xff1a;便捷、安全。用户希望在最短的时间内找到需要的物品&#xff0c;而商家则希望通过这…...

威胁建模助力企业“建防御 抓运营”

本文为安全知识图谱技术白皮书《践行安全知识图谱&#xff0c;携手迈进认知智能》精华解读系列第六篇——威胁建模技术&#xff0c;重点介绍基于知识图谱的威胁建模应用。 如何做好威胁建模 如今&#xff0c;随着技术的变化&#xff0c;攻防技术不对等和攻防双方关注面不同&a…...

soular使用教程

用 soular 配置你的组织&#xff0c;工作更高效&#xff01;以下是快速上手的简单步骤&#xff1a; &#xfeff; 1. 账号管理 可以对账号信息进行多方面管理&#xff0c;包括分配不同的部门、用户组等&#xff0c;从而确保账号权限和职责的清晰分配。 &#xfeff; 1.1 用…...

WPF编程excel表格操作

WPF编程excel表格操作 摘要NPOI安装封装代码测试代码 摘要 Excel操作几种方式 使用开源库NPOI(常用&#xff0c;操作丰富)使用Microsoft.Office.Interop.Excel COM组件(兼容性问题)使用OpenXml(效率高)使用OleDb(过时) NPOI安装 封装代码 using System; using System.IO; u…...

银河麒麟操作系统安装达梦数据库(超详细)

目录 引言1. 前期准备1.1 安装麒麟系统1.2 下载达梦数据库安装包&#xff08;DM8&#xff09;1.3 上传安装包到麒麟系统1.4 挂载安装包&#xff08;iso&#xff09;文件1.5 配置安装用户和组1.6 创建安装路径及修改权限1.7 设置临时安装目录 2. 安装达梦数据库&#xff08;DM8&…...

SpringCloudAlibaba实战入门之路由网关Gateway初体验(十一)

Spring Cloud 原先整合 Zuul 作为网关组件,Zuul 由 Netflix 公司提供的,现在已经不维护了。后面 Netflix 公司又出来了一个 Zuul2.0 网关,但由于一直没有发布稳定版本,所以 Spring Cloud 等不及了就自己推出一个网关,已经不打算整合 zuul2.0 了。 一、什么是网关 1、顾明…...

struct sock

struct sock是套接口在网络层的表示,它包含了套接字在网络通信中的各种状态和参数。以下是对struct sock的详细解析: 定义与位置 struct sock通常在内核源代码的某个头文件中定义,例如include/net/sock.h。它是网络通信中非常重要的数据结构,用于在内核中表示一个套接字。…...

77、将adaface的mtcnn模型npy文件转成atlas310p模型,并进行推理

基本思想:将adaface的mtcnn模型npy文件转成atlas310p模型进行推理。同时比对结果 ubuntu@ubuntu:~$ git clone https://github.com/mk-minchul/AdaFace.git Cloning into AdaFace... remote: Enumerating objects: 236, done. remote: Counting objects: 100% (109/109), don…...

Docker应用-项目部署及DockerCompose

文章目录 Docker应用-项目部署1. 项目部署-后端1.1 修改配置1.2 项目打包1.3 编写Dockerfile1.4 创建镜像1.5 创建并运行容器1.6 测试 2. 项目部署-前端2.1 html前端静态目录2.2 nginx.config编写2.3 部署宿主机服务器2.4 创建容器并挂载2.5 测试 3. DockerCompose3.1 基本语法…...

Java重要面试名词整理(十一):网络编程

文章目录 概念网络协议计算机网络是什么&#xff1f;定义和分类计算机网络发展简史 计算机网络体系结构OSI七层模型TCP/IP模型TCP/IP协议族IP、TCP和UDPARPTCP/IP网络传输中的数据地址和端口号**端口号的确定** TCP特性TCP三次握手TCP四次挥手&#xff08;分手&#xff09; UDP…...

html + css 淘宝网实战

之前有小伙伴说&#xff0c;淘宝那么牛逼你会写代码&#xff0c;能帮我做一个一样的淘宝网站吗&#xff0c;好呀&#xff0c;看我接下来如何给你做一个淘宝首页。hahh,开个玩笑。。。学习而已。 在进行html css编写之前 先了解下网页的组成和网页元素的尺寸吧 1.网页的组成 …...

Linux打包压缩解压 --- 打包tar命令(归档)

一、tar命令打包&#xff08;归档&#xff09; 在 Linux 中&#xff0c;tar 是一种用于归档文件的工具。通过此命令可将多个文件或目录组合成单个档案文件&#xff0c;可以搭配gzip和bzip等压缩命令让文件体积更小&#xff0c;在配置服务器前备份服务器现有配置&#xff0c;会…...

流架构的读书笔记(2)

流架构的读书笔记&#xff08;2&#xff09; 一、建模工具之一沃德利地图 推测技术的发展,交流和辩论思想的最有力的方法是沃德利地图 沃德利地图的制作步骤 1确定范围和用户需求 2确定满足用户需求所需的组件 3在一条范围从全新到被人们接受的演进轴上评估这些组成 部分的演…...

Xshell远程连接提示“找不到匹配的host key算法“问题处理

1.问题描述 Xshell连接远程服务器node1&#xff0c;提示找不到匹配的host key算法&#xff1b;但是用同机房的其他服务器可以使用ssh连接到这个node1机器&#xff1b; 2.问题处理 问题处理尝试了很多方法&#xff0c;可能大家遇到的有所不同&#xff0c;可以尝试一下本文中的…...

Qt C++关于QSpinBox、QDoubleSpinBox的输入框内鼠标点击事件无法触发截取信号的解决办法

项目场景&#xff1a; 基于Qt C 开发鼠标点击spinbox的触发任务时&#xff0c;我基于QSpinBox继承开发了一个新类&#xff0c;用于弹出自定义键盘。 问题描述 在鼠标点击spinbox的边框以及上下键的时候&#xff0c;能够触发覆写的mousePressEvent&#xff0c;但是一旦鼠标点击…...

【ES6复习笔记】Symbol 类型及其应用(9)

一、Symbol 简介 Symbol 是 JavaScript 中的一种基本数据类型&#xff0c;它表示唯一的标识符。Symbol 的主要目的是防止属性名冲突&#xff0c;尤其是在多个代码库或模块中共享对象时。Symbol 值可以用作对象的属性名&#xff0c;这样可以确保属性名是唯一的&#xff0c;不会…...

深度学习笔记(4)——视频理解

视频理解 视频理解的问题:视频太大了 解决方案:在切片上训练,低FPS,低分辨率 测试的时候:在不同的clips上运行模型,取平均预测结果 视频由图片序列组成: 单帧CNN模型 训练普通的2D CNN模型,对每一帧进行分类&#xff0c;通常是视频分类的一个非常强的基线方法。 Late Fusio…...

Flink定时器

flink的定时器都是基于事件时间&#xff08;event time&#xff09;或事件处理时间&#xff08;processing time&#xff09;的变化来触发响应的。对一部分新手玩家来说&#xff0c;可能不清楚事件时间和事件处理时间的区别。我这里先说一下我的理解&#xff0c;防止下面懵逼。…...

springboot餐厅点餐系统丨源码+数据库+万字文档+PPT

作者简介&#xff1a; 作者&#xff1a;学姐 开发技术&#xff1a;SpringBoot、SSM、Vue、MySQL、JSP、ElementUI、Python、小程序等 文末获取“源码数据库万字文档PPT”&#xff0c;支持远程部署调试、运行安装。 技术框架 开发语言&#xff1a;Java 框架&#xff1a;springbo…...

记一个itertools排列组合和列表随机排序的例子

朋友不知道哪里弄来了一长串单词列表&#xff0c;一定要搞个单词不重复的组合。那么这个时候我们就可以想到读书时所学的排列组合知识了&#xff0c;而这个在Python中可以怎么实现呢&#xff1f;我记录如下&#xff1a; 使用itertools模块实现排列组合 在 Python 中&#xff…...

Intent--组件通信

组件通信1 获取子活动的返回值 创建Activity时实现自动注册&#xff01;【Activity必须要注册才能使用】 默认 LinearLayout 布局&#xff0c;注意 xml 中约束布局的使用&#xff1b; 若需要更改 线性布局 只需要将标签更改为 LinearLayout 即可&#xff0c;记得 设置线性布局…...

数据分析与应用:如何分析7日动销率和滞销率?

目录 0 需求描述 1 数据准备 1.1 订单明细表 1.2 商品信息表 2 SQL实现 3 问题分析与总结...

信息系统管理工程第8章思维导图

软考信管第8章的思维导图也实在是太长了&#xff0c;制作的耗时远超过之前的预计。给你看看思维导图的全貌如下&#xff0c;看看你能够在手机上滚动多少个屏幕 当你看到这段文字的时候&#xff0c;证明你把思维导图从上到下看完了&#xff0c;的确很长吧&#xff0c;第8章的教程…...

5-pandas常用操作2

前言 一、df.max() 计算每列最大值 二、df.apply() 1.可以传函数 代码如下&#xff08;示例&#xff09;&#xff1a; # lambda 匿名函数自定义 f lambda x:x.max()-x.min() # x参数 冒号后是返回值 df.apply(f) # 默认axis0,所以这里是按列求最大值-最小值2.可以直…...

【HarmonyOS之旅】ArkTS语法(一)

目录 1 -> 基本UI描述 1.1 -> 基本概念 1.2 -> UI描述规范 1.2.1 -> 无参数构造配置 1.2.2 -> 必选参数构造配置 1.2.3 -> 属性配置 1.2.4 -> 事件配置 1.2.5 -> 子组件配置 2 -> 状态管理 2.1 -> 基本概念 2.2 -> 页面级变量的状…...

基于Spring Boot + Vue3实现的在线商品竞拍管理系统源码+文档

前言 基于Spring Boot Vue3实现的在线商品竞拍管理系统是一种现代化的前后端分离架构的应用程序&#xff0c;它结合了Java后端框架Spring Boot和JavaScript前端框架Vue.js的最新版本&#xff08;Vue 3&#xff09;。该系统允许用户在线参与商品竞拍&#xff0c;并提供管理后台…...

解决k8s部署dashboard时一直处于Pending状态的问题

直接用离线包就行 命令 [rootk8s-master ~]# docker load -i calico-image-v3.25.0.tar [rootk8s-master ~]# kubectl apply -f calico.yaml链接在https://download.csdn.net/download/weixin_42759398/90192045 [rootk8s-master ~]# docker load -i calico-image-v3.25.0.t…...

【新方法】通过清华镜像源加速 PyTorch GPU 2.5安装及 CUDA 版本选择指南

下面详细介绍所提到的两条命令&#xff0c;它们的作用及如何在你的 Python 环境中加速 PyTorch 等库的安装。 1. 设置清华镜像源 pip config set global.index-url https://pypi.tuna.tsinghua.edu.cn/simple这条命令的作用是将 pip &#xff08;Python 的包管理工具&#xf…...

Excel批量设置行高,Excel表格设置自动换行后打印显示不全,Excel表格设置最合适的行高后打印显示不全,完美解决方案!!!

文章目录 说个问题&#xff08;很严重&#xff01;&#xff01;&#xff01;&#xff09;写个方案会Python看这里Python环境搭建不存在多行合并存在多行合并 不会Python看这里 说个问题&#xff08;很严重&#xff01;&#xff01;&#xff01;&#xff09; 平时处理Excel表格…...

高阶数据结构之并查

并查集的概念 之前我们曾学过树&#xff0c;二叉树、二叉搜索树、红黑树、AVL树等&#xff0c;而并查集可以看做是这些树的集合&#xff0c;也就是森林&#xff0c;它也是一种树型结构&#xff0c;不过是顺序的树型结构&#xff0c;如果有学过堆的同学应该会很熟悉。 它的作用是…...