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

sqlalchemy FastAPI 前端实现数据库增删改查

sqlalchemy FastAPI 前端实现数据库增删改查

仅个人学习笔记,感谢点赞关注!


知识点
  • 连接数据库
  • sqlalchemy 创建表结构
  • FastAPI get post put delete操作
  • FastAPI 请求体 路径和修改参数 依赖项

代码
# -*- ecoding: utf-8 -*-
# @Author: SuperLong
# @Email: miu_zxl@163.com
# @Time: 2024/9/9 17:04
import os
import uvicorn
from fastapi import FastAPI, Depends, HTTPException, Path,status
from pydantic import BaseModel
from typing import List,Optional,Set
from sqlalchemy import create_engine, Column, Integer, String, and_, select, update
from sqlalchemy.orm import sessionmaker, Mapped, DeclarativeBase, mapped_columnengine = create_engine('mysql://root:long520@localhost/test',echo=True)
class Base(DeclarativeBase):pass
class StudentClass(Base):__tablename__ = "StudentClass"id:Mapped[str]=mapped_column(Integer,primary_key=True)name:Mapped[str]=mapped_column(String(50),nullable=False)gender:Mapped[str]=mapped_column(String(5),nullable=False)Base.metadata.create_all(engine)
Session = sessionmaker(bind=engine)
session = Session()class StudentBase(BaseModel):id:intname:strgender:strclass StudentIn(StudentBase):passclass StudentOut(StudentBase):passdef get_db():db = Session()try:yield dbfinally:db.close()app = FastAPI()@app.get('/students')
async def get_students(db:Session=Depends(get_db)):query = select(StudentClass).order_by(StudentClass.id)return db.execute(query).scalars().all()@app.post('/students',response_model=StudentOut)
async def create_students(student:StudentIn,db:Session=Depends(get_db)):query = select(StudentClass).where(StudentClass.name == student.name)result = db.execute(query).scalars().all()if result:raise HTTPException(status_code=400,detail=f"学生 {student.name} 已存在")new_student = StudentClass(id=student.id,name=student.name,gender=student.gender)db.add(new_student)db.commit()return new_student@app.put('/students/{student_id}',response_model=StudentOut)
async def update_students(*,student_id:int=Path(...),student:StudentBase,db:Session=Depends(get_db)):query = select(StudentClass).where(StudentClass.id == student_id)result = db.execute(query).scalar()if not result:raise HTTPException(status_code=400, detail=f"学生ID {student_id} 不存在")def update_mm(students:dict,changes:dict):for keys,values in changes.items():setattr(students,keys,values)update_mm(result,student.model_dump())db.commit()return result@app.delete('/students/{student_id}',response_model=StudentOut)
def delete_students(student_id:int=Path(...),db:Session=Depends(get_db)):query = select(StudentClass).where(student_id == StudentClass.id)result = db.execute(query).scalar()if not result:raise HTTPException(status_code=status.HTTP_404_NOT_FOUND, detail=f"学生ID {student_id} 不存在")db.delete(result)db.commit()return resultif __name__ == '__main__':print(os.path.split(os.path.abspath(__file__))[1])uvicorn.run(port=5025,app=f"{os.path.split(os.path.abspath(__file__))[1].split('.')[0]}:app",reload=True)# # todo 增
# students = [
#             StudentClass(id=1, name="张",gender="男",phone_number="13463135455"),
#             StudentClass(id=2, name="张龍",gender="男",phone_number="13463125455"),
#             StudentClass(id=3, name="张晓同",gender="男",phone_number="13463145455"),
#             StudentClass(id=4, name="张晓里",gender="男",phone_number="13463165455"),
# ]
# session.add_all(students)
# session.commit()
# # todo 查
# result = session.query(StudentClass).filter(StudentClass.gender == "男").all()
# for ii in result:
#     print("name:",ii.id)
#     print("brithday:",ii.name)# todo 改
# result = session.query(StudentClass).filter(
#     and_(
#     StudentClass.gender == "男",
#     StudentClass.name == "李楠"
#     )
# ).update(
#     {StudentClass.phone_number:"123456789"}
# )
#
# session.commit()
# todo 删
# result = session.query(StudentClass).filter(
#     and_(
#         StudentClass.gender == "男",
#         StudentClass.name == "李佳"
#     )
# ).delete()
# session.commit()

目前专注于NLP、大模型和前后端的技术学习和分享

感谢大家的关注与支持!

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • 快速上手指南:在Windows系统中下载Ollama,一键启动大模型体验!
  • P2P应用
  • 自己动手实现mybatis的底层框架(不用动态代理直接用执行器、用动态代理自己实现。图文分析!)
  • 智慧教室无纸化同屏方案是否适用RTMP?
  • virtual cells 相关软件整理
  • 直播相关01-录制麦克风声音,QT上 .pro 将 linux,mac和windows上配置为三种可以共享, 在.pro文件中 message 的作用
  • 【数据库】MySQL-基础篇-函数
  • 批量创建文件夹和文件——excel VBA实现
  • Aigtek功率放大器在超声检测陶瓷复合材料内部缺陷中的应用
  • HTML5 `<button>` 标签深入全面解析
  • 运动耳机精选分享,热门骨传导耳机运动好物推荐!
  • 10款超好用的文件加密软件推荐|企业文件加密的好选择
  • 中国碳排放交易试点城市名单DID(2000-2022年)
  • 如何使用 Nginx 部署前端 Vue 项目
  • 深入理解 Go 中的 defer、panic 、日志管理与WebAssembly
  • 分享的文章《人生如棋》
  • $translatePartialLoader加载失败及解决方式
  • Consul Config 使用Git做版本控制的实现
  • js作用域和this的理解
  • LeetCode18.四数之和 JavaScript
  • mac修复ab及siege安装
  • markdown编辑器简评
  • Vim 折腾记
  • vue-cli在webpack的配置文件探究
  • Vue源码解析(二)Vue的双向绑定讲解及实现
  • 安装python包到指定虚拟环境
  • 大数据与云计算学习:数据分析(二)
  • 翻译--Thinking in React
  • 基于Mobx的多页面小程序的全局共享状态管理实践
  • 技术:超级实用的电脑小技巧
  • 精益 React 学习指南 (Lean React)- 1.5 React 与 DOM
  • 排序算法学习笔记
  • 数组大概知多少
  • 新书推荐|Windows黑客编程技术详解
  • 学习使用ExpressJS 4.0中的新Router
  • 一加3T解锁OEM、刷入TWRP、第三方ROM以及ROOT
  • 用Visual Studio开发以太坊智能合约
  • 走向全栈之MongoDB的使用
  • FaaS 的简单实践
  • Java性能优化之JVM GC(垃圾回收机制)
  • ​Distil-Whisper:比Whisper快6倍,体积小50%的语音识别模型
  • ‌移动管家手机智能控制汽车系统
  • !!Dom4j 学习笔记
  • # Maven错误Error executing Maven
  • # 达梦数据库知识点
  • #162 (Div. 2)
  • #nginx配置案例
  • $.ajax()参数及用法
  • (13)DroneCAN 适配器节点(一)
  • (C11) 泛型表达式
  • (DenseNet)Densely Connected Convolutional Networks--Gao Huang
  • (独孤九剑)--文件系统
  • (分享)一个图片添加水印的小demo的页面,可自定义样式
  • (附源码)apringboot计算机专业大学生就业指南 毕业设计061355
  • (亲测成功)在centos7.5上安装kvm,通过VNC远程连接并创建多台ubuntu虚拟机(ubuntu server版本)...