发布时间:2026/8/27 8:41:46
FastAPI+SQLAlchemy 异步 CRUD 完整示例 统一采用session: AsyncSession Depends(get_session)依赖注入方式不使用中间件request.state.session事务使用async with session.begin()自动 com依赖准备前面已写from fastapi import FastAPI, Depends, HTTPException from sqlalchemy.ext.asyncio import AsyncSession from sqlalchemy import select, delete, update from pydantic import BaseModel from typing import List from models import AsyncSessionFactory, User app FastAPI() # 依赖函数获取数据库Session async def get_session(): session AsyncSessionFactory() try: yield session finally: await session.close() # 响应Schema class UserRespSchema(BaseModel): id: int email: str username: str class Config: orm_mode True # 创建用户请求Schema class UserCreateReqSchema(BaseModel): email: str username: str password: str1、新增数据 createapp.post(/user/add, response_modelUserRespSchema) async def add_user( req: UserCreateReqSchema, session: AsyncSession Depends(get_session) ): try: async with session.begin(): user User(usernamereq.username, emailreq.email, passwordreq.password) session.add(user) return user except Exception: raise HTTPException(status_code400, detail用户名或邮箱已经存在)2、删除数据 deleteapp.delete(/user/delete/{user_id}) async def delete_user( user_id: int, session: AsyncSession Depends(get_session) ): async with session.begin(): await session.execute( delete(User).where(User.id user_id) ) return {message: 删除成功}3、查询数据 select查询单条app.get(/user/select/{user_id}, response_modelUserRespSchema) async def select_user_by_id( user_id: int, session: AsyncSession Depends(get_session) ): async with session.begin(): query await session.execute( select(User.id, User.email, User.username).where(User.id user_id) ) result query.one()._asdict() return result查询多条 模糊搜索、分页排序app.get(/user/list, response_modelList[UserRespSchema]) async def select_user_list( q: str | None None, session: AsyncSession Depends(get_session) ): from sqlalchemy import or_ stmt select(User.id, User.username, User.email) if q: stmt stmt.where( or_( User.email.contains(q), User.username.contains(q) ) ) # 分页、排序 stmt stmt.limit(2).offset(0).order_by(User.id.desc()) query await session.execute(stmt) result [row._asdict() for row in query] return result注意session.query()只适用于同步 SQLAlchemyselect()。4、修改数据 update方式 1先查询对象修改对象属性执行 2 次 SQL可以直接返回修改后对象app.put(/user/update/{user_id}, response_modelUserRespSchema) async def update_user_obj( user_id: int, user_data: UserCreateReqSchema, session: AsyncSession Depends(get_session) ): async with session.begin(): query await session.execute(select(User).where(User.id user_id)) user query.scalars().first() user.email user_data.email user.username user_data.username return user方式 2直接 update 语句只执行 1 次 SQL不会刷新 ORM 对象app.put(/user/update_direct/{user_id}) async def update_user_direct( user_id: int, user_data: UserCreateReqSchema, session: AsyncSession Depends(get_session) ): async with session.begin(): await session.execute( update(User) .where(User.id user_id) .values(**user_data.dict()) ) return {message: 数据修改成功}

相关新闻

2026/8/27 8:41:46

SCDLG:生成式抄袭检测与候选源重排序新方法

生成式模型的论文、作业、代码片段越来越多,如何判断一段文字究竟是“基于资料库的正常引用”,还是“对单一源头的隐性抄袭”,已经变成 NLP 和内容安全领域一个非常现实的问题。传统做法大多依赖表征相似度,也就是把两段文本分别编…

2026/8/27 8:41:46

DeepSeek与Kimi接入指南:从API调用到IDE插件配置全解析

在最近一段时间的开发工具链讨论里,DeepSeek 和 Kimi 是两个出现频率最高的国产大模型。标题里的“被抢疯了”放在技术圈,主要体现在开发者对这两家 API 的热情,以及 Codex 接入、VSCode 插件、IDEA 插件、本地部署、local proxy 转发等工具配…

2026/8/27 8:41:46

从SEIR到SEIDR:Python实现传染病建模与外部输入分析

1. 项目概述:从SEIR到SEIDR,当传染病模型遇见现实复杂性搞数学建模,尤其是传染病这块,兄弟们肯定对SEIR模型不陌生。S(易感者)、E(暴露者/潜伏者)、I(感染者)…

2026/8/27 9:31:54

ABAP异步RFC并发编程实战:性能优化与采购订单校验案例

1. 项目概述:为什么ABAP并发与异步RFC是性能优化的关键 在SAP ABAP开发领域,尤其是面对日益复杂的业务逻辑和海量数据处理需求时,系统性能瓶颈常常成为开发者和业务用户最头疼的问题。你可能会遇到这样的场景:一个需要处理上万条采…

2026/8/27 9:31:54

蓝桥杯最大数字题解:贪心与DFS剪枝优化策略

1. 问题引入:当“最大数字”遇上“操作限制”最近在整理蓝桥杯国赛的历年真题时,一道名为“最大数字”的题目引起了我的注意。这道题乍一看,似乎就是一道简单的贪心或搜索题,但仔细琢磨它的操作限制后,你会发现它远没有…

2026/8/27 9:31:54

PyTorch实战:DCGAN与MobileNet V3解决小样本图像分类难题

1. 项目概述:当数据不足时,我们如何“创造”数据 在计算机视觉的实际项目中,我们常常会遇到一个令人头疼的困境:想法很美好,但数据量太少。无论是医疗影像分析、工业缺陷检测,还是某些特定领域的图像识别&a…

2026/8/27 9:31:54

Windows C盘爆满手把手清理攻略:不装第三方软件也能释放几十GB

C盘又满了?清了几次临时文件,没过两天红色条又亮了。这次我们不聊“装个管家软件一键清理”那种治标不治本的办法,直接把手动清C盘的完整思路和可执行步骤整理出来。整个过程不需要第三方全家桶,主要用 Windows 自带工具和几条命令…

2026/8/27 9:31:54

从零设计8位MCU IP核:FPGA软核处理器的实现与验证

1. 为什么还要做8位MCU IP核:低成本场景下的不可替代性 很多人一听到8位MCU IP核,第一反应都是“这年头谁还用8位?”说实话,我当初接到这个需求时也犹豫过。市面上ARM Cortex-M系列满天飞,RISC-V也在快速蚕食中高端市场…

2026/8/26 9:13:28

[光学原理与应用-521]:对光的错误理解与纠偏

首先光是一种能量的载体和形态,宏观上观察到的光是由无数个微观的光量子组成的,每个光子在产生的瞬间,其在真空的空间中以确定不变的速度沿着一个初始的方向一直向前,在微观层面,每个光量子的运动轨迹是以波函数所展现…

2026/8/25 11:48:27

SIP通话转接原理与REFER方法实战解析

1. 通话转接不是“挂断再拨号”,而是SIP会话的动态重定向你有没有遇到过这样的场景:客服坐席A正在和客户通电话,突然需要把这通对话无缝转给专家坐席B,客户完全感知不到中间的断连——既没听到忙音,也没被要求重新拨号…

2026/8/27 7:46:21

Kolla-ansible单节点OpenStack部署实战:从环境准备到排坑指南

1. 为什么选择Kolla-ansible来部署单节点OpenStack?如果你正在寻找一种能把OpenStack从“概念”快速变成“可用的实验环境”的方法,那么Kolla-ansible几乎是当前最主流、最省心的选择。我见过太多人卡在手动编译依赖、配置服务、处理版本冲突的泥潭里&am…

2026/8/27 0:01:16

Go语言构建企业级AI服务网关:统一管理英伟达等AI接口调用

1. 项目概述:从零构建一个企业级的AI服务网关 最近在帮一个做内容审核的团队做技术架构升级,他们原来的业务里,每天有几十万张图片和短视频需要过审,最初是接了几个开源的AI模型自己部署,但效果和性能一直不太稳定。后…

2026/8/27 0:01:16

LeetCode Hot100(51-60)算法精解与面试技巧

1. 题目背景与核心价值"hot100(51-60)"这个标题看起来像是某个编程题库或算法练习集中的一组题目编号。在技术社区中,类似命名通常指向LeetCode、牛客网等平台的热门题目集合。作为刷过300题的算法老手,我理解这类题目的核心价值在于&#xff…

2026/8/27 0:01:16

CRC校验实战:从模2除法到HJ212协议排错

1. 为什么一个“校验码”能扛住工业现场90%的数据 corruption? 你有没有遇到过这样的场景:嵌入式设备通过RS-485上传温湿度数据,上位机偶尔收到一帧乱码——温度显示成-273℃,湿度跳到999%,但串口波形看起来完全正常&a…

2026/8/26 19:34:06

实测才敢推 AI论文网站 2026最新测评与推荐

2026年真正好用的AI论文网站,核心看生成的论文质量、低AI味、格式正确、学术适配四大指标。综合实测,千笔AI、ThouPen、豆包、DeepSeek、Grammarly 是当前最值得推荐的梯队,覆盖从免费到付费、从中文到英文、从文科到理工的全场景需求。一、综…

2026/8/26 19:17:08

2026必备!AI论文网站测评:最新推荐与深度对比

2026年真正好用的AI论文网站,核心看生成的论文质量、低AI味、格式正确、学术适配四大指标。综合实测,千笔AI、ThouPen、豆包、DeepSeek、Grammarly 是当前最值得推荐的梯队,覆盖从免费到付费、从中文到英文、从文科到理工的全场景需求。 一、…

2026/8/26 19:34:05

摆脱论文困扰!盘点2026年全网爆红的的AI论文写作工具

一天写完毕业论文在2026年已不再是天方夜谭。2026年最炸裂、实测能大幅提速的AI论文写作工具,覆盖选题构思、文献整理、内容生成、格式排版等核心场景,真正帮你高效搞定论文难题。 一、全流程王者:一站式搞定论文全链路(一天定稿首…