尧图网络 高端网站定制 · 原创设计
免费咨询热线
400-888-6620
免费获取方案
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: 数据修改成功}
RELATED

相关推荐

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

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

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

📅 2026/10/17 17:21:47
DeepSeek与Kimi接入指南:从API调用到IDE插件配置全解析

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

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

📅 2026/11/15 14:52:57
从SEIR到SEIDR:Python实现传染病建模与外部输入分析

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

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

📅 2026/10/14 7:52:59
MORE NEWS

更多资讯

📰

鹤壁市电工证考试怎么准备?电子证书时代怎么不掉队

鹤壁市电工证考试怎么准备?电子证书时代怎么不掉队 工地太忙根本没时间复习考试,这几乎是每个特种作业人员的共识。尤其是像电工这样的岗位,既要保证施工进度,又要兼顾理论考试和实操培训,时间成了最大的敌人。但别忘了, 电子证书…

📰

中级电工证在学校考怎么报名才能不被坑

中级电工证在学校考怎么报名才能不被坑 你是不是也遇到过这种情况:想考个中级电工证,但不知道去哪里报名,担心被中介坑,怕花钱又没结果?现在就告诉你, 中级电工证在学校考怎么报名…

📰

电工证的版本怎么考,过期了怎么报名复审

电工证的版本怎么考,过期了怎么报名复审 证书过期了不知道怎么复审延期,这事儿我懂,我身边好几个工友都遇到过。电工证的版本不是一成不变的,随着政策更新、技术升级,证书的类型、考试内容、复审流程也在变,搞不懂怎么报名、怎么复审,真的会耽误工作机…

📰

读书维修电工证怎么考内部消息曝光 工地太忙也能考过

读书维修电工证怎么考内部消息曝光 工地太忙也能考过 工地太忙根本没时间复习考试,但读书维修电工证怎么考这个问题,直接影响你能不能拿到证,也关系到以后能不能干得更久、更稳。别急,内部消息来了,这次给你讲透实情,不绕弯子,直接上干货。…

📰

宝鸡陇县电工证过期了怎么复审?全国通用证书怎么查?

宝鸡陇县电工证过期了怎么复审?全国通用证书怎么查? 证书过期了不知道怎么复审延期,你不是一个人。特别是在宝鸡陇县,电工证作为特种作业人员的核心凭证,一旦过期就可能面临停工、罚款甚至被清退的风险。别担心,本文就为你详细讲清楚宝鸡陇县电工证复审…

📰

中焊工电工证考试培训机构怎么选

30岁焊工电工证过期了怎么复审?良心建议给你划重点 证书过期了不知道怎么复审延期?别慌,很多人在遇到这种情况时都会手忙脚乱。尤其是像你这样在信阳本地从事建筑行业的电焊工,手里拿着的 中焊工电工证考试…

TODAY

今日更新

THIS WEEK

本周精选

THIS MONTH

本月热门

读完文章,想聊聊您的网站?

告诉我们您的行业与需求,资深顾问一对一梳理方案与报价,全程免费。

📞 💬