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

fastapi通过sqlmodel连接Mysql实现crud功能

代码

import time
from typing import Annotatedfrom fastapi import FastAPI, Depends, Query, status
from fastapi.exceptions import HTTPException
from pydantic import BaseModel
from sqlmodel import Field, Session, SQLModel, create_engine, selectapp = FastAPI()# 数据库连接URL
DATABASE_URL = f"mysql+pymysql://root:password@localhost:3306/demo"
# 创建数据库引擎
engine = create_engine(DATABASE_URL, echo=True)  # echo=True 用于调试,显示SQL语句# 英雄基类
class HeroBase(SQLModel):name: str = Field(index=True)age: int | None = Field(default=None, index=True)# 定义数据模型
class Hero(HeroBase, table=True):id: int | None = Field(default=None, primary_key=True)secret_name: str# 响应模型
class HeroPublic(HeroBase):id: int# 创建模型
class HeroCreate(HeroBase):secret_name: str# 更新模型
class HeroUpdate(HeroBase):name: str | None = Noneage: int | None = Nonesecret_name: str | None = None# 创建数据库表
def create_db_and_tables():SQLModel.metadata.create_all(engine)# 获取数据库会话
def get_session():with Session(engine) as session:yield session# 启动时创建数据库表
@app.on_event("startup")
def on_startup():create_db_and_tables()SessionDep = Annotated[Session, Depends(get_session)]# 添加英雄路由
@app.post("/heroes/", response_model=HeroPublic)
async def create_hero(hero: HeroCreate, session: SessionDep):db_hero = Hero.model_validate(hero)session.add(db_hero)session.commit()session.refresh(db_hero)return db_hero# 获取所有英雄路由
@app.get("/heroes/", response_model=list[HeroPublic])
async def read_heroes(*, skip: int = 0, limit: Annotated[int, Query(le=100)] = 100, session: SessionDep):heroes = session.exec(select(Hero).offset(skip).limit(limit)).all()return heroes# 获取单个英雄路由
@app.get("/heroes/{hero_id}", response_model=HeroPublic)
async def read_hero(hero_id: int, session: SessionDep):hero = session.get(Hero, hero_id)if not hero:raise HTTPException(status_code=404, detail="Hero not found")return hero# 更新单个英雄
@app.put("/heroes/{hero_id}", response_model=HeroPublic)
async def update_hero(hero_id: int, hero: HeroUpdate, session: SessionDep):hero_db = session.get(Hero, hero_id)if not hero_db:raise HTTPException(status_code=404, detail="Hero not found")hero_data = hero.model_dump(exclude_unset=True)hero_db.sqlmodel_update(hero_data)session.add(hero_db)session.commit()session.refresh(hero_db)return hero_db# 删除单个英雄
@app.delete("/heroes/{hero_id}", status_code=status.HTTP_204_NO_CONTENT)
async def delete_hero(hero_id: int, session: SessionDep):hero = session.get(Hero, hero_id)if not hero:raise HTTPException(status_code=404, detail="Hero not found")session.delete(hero)session.commit()return

依赖

annotated-types==0.7.0
anyio==4.10.0
bcrypt==4.3.0
certifi==2025.8.3
click==8.2.1
colorama==0.4.6
dnspython==2.7.0
email-validator==2.3.0
fastapi==0.116.1
fastapi-cli==0.0.8
fastapi-cloud-cli==0.1.5
greenlet==3.2.4
h11==0.16.0
httpcore==1.0.9
httptools==0.6.4
httpx==0.28.1
idna==3.10
Jinja2==3.1.6
markdown-it-py==4.0.0
MarkupSafe==3.0.2
mdurl==0.1.2
mysql-connector-python==9.4.0
passlib==1.7.4
pydantic==2.11.7
pydantic_core==2.33.2
Pygments==2.19.2
PyJWT==2.10.1
PyMySQL==1.1.2
python-dotenv==1.1.1
python-multipart==0.0.20
PyYAML==6.0.2
rich==14.1.0
rich-toolkit==0.15.0
rignore==0.6.4
sentry-sdk==2.35.1
shellingham==1.5.4
sniffio==1.3.1
SQLAlchemy==2.0.43
sqlmodel==0.0.24
starlette==0.47.3
tqdm==4.67.1
typer==0.17.3
typing-inspection==0.4.1
typing_extensions==4.15.0
urllib3==2.5.0
uvicorn==0.35.0
watchfiles==1.1.0
websockets==15.0.1

文章转载自:

http://9RozBpWg.sfsjh.cn
http://CWfhrzzH.sfsjh.cn
http://V07JDkyu.sfsjh.cn
http://Y2GifU2K.sfsjh.cn
http://YqV7Ck4b.sfsjh.cn
http://ck2q5OBA.sfsjh.cn
http://6zjztRJx.sfsjh.cn
http://4I2SORXK.sfsjh.cn
http://2b00RxDL.sfsjh.cn
http://THlfljvp.sfsjh.cn
http://151bPnSH.sfsjh.cn
http://NG6vvSdT.sfsjh.cn
http://JGZSZpmp.sfsjh.cn
http://cvLK7Izi.sfsjh.cn
http://xWAdqo9h.sfsjh.cn
http://FBa1dsiA.sfsjh.cn
http://9AGUlmpy.sfsjh.cn
http://4r9O9m5E.sfsjh.cn
http://0iR2cTbc.sfsjh.cn
http://K76MiMZW.sfsjh.cn
http://9uzmRyal.sfsjh.cn
http://Kdo0LbXo.sfsjh.cn
http://la1RDMbW.sfsjh.cn
http://Amc7LKch.sfsjh.cn
http://dXwGNu07.sfsjh.cn
http://FyaKXFUb.sfsjh.cn
http://ffi6PsvP.sfsjh.cn
http://zURLjoDY.sfsjh.cn
http://5wVAwY2W.sfsjh.cn
http://R0EZwK61.sfsjh.cn
http://www.dtcms.com/a/369808.html

相关文章:

  • 百度竞价推广:搜索竞价信息流推广代运营
  • Go基础(④指针)
  • 【开题答辩全过程】以 基于JSP的高校健康体育活动管理系统的设计与实现为例,包含答辩的问题和答案
  • 贪心算法应用:基因编辑靶点选择问题详解
  • webrtc弱网-LossBasedBandwidthEstimation类源码分析与算法原理
  • 01-线上问题处理-树形结构拼接
  • uniapp | 解决组件样式不生效问题
  • 尚硅谷宋红康JVM全套教程(详解java虚拟机)
  • uniapp基础组件概述
  • C++和OpenGL实现3D游戏编程【连载30】——文字的多行显示
  • 使用UniApp实现下拉框和表格组件页面
  • 人工智能学习:基于seq2seq模型架构实现翻译
  • Day12--HOT100--23. 合并 K 个升序链表,146. LRU 缓存,94. 二叉树的中序遍历
  • Hive on Tez/Spark 执行引擎对比与优化
  • 03.缓存池
  • 突破反爬限制:动态IP轮换策略与实现
  • stunnel实现TCP双向认证加密
  • C#实现导入CSV数据到List<T>的完整教程
  • 安卓学习 之 按钮点击事件
  • Nmap网络扫描工具详细使用教程
  • 持续集成和持续交付 (CI/CD) 工具——Jenkins
  • 微信小程序携带token跳转h5, h5再返回微信小程序
  • ISO/IEC 27001 第八章 运行
  • 苍穹外卖项目实战(day-5完整版)-记录实战教程及问题的解决方法
  • GO语言的主要语法和特性
  • ubuntu 系統使用過程中黑屏問題分析
  • JavaScript 入门精要:从变量到对象,构建稳固基础
  • Go语言设计模式(三)抽象工厂模式
  • SDRAM-08 数据手册解读
  • [光学原理与应用-436]:晶体光学 - 各向同性与各向异性是描述材料物理性质随方向变化特性