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

12-ORM-路由中使用ORM

from datetime import datetimefrom fastapi import FastAPI, Depends
from sqlalchemy import DateTime, func, String, Float, select
from sqlalchemy.ext.asyncio import create_async_engine, async_sessionmaker, AsyncSession
from sqlalchemy.orm import DeclarativeBase, Mapped, mapped_columnapp = FastAPI()# 1. 创建异步引擎
ASYNC_DATABASE_URL = "mysql+aiomysql://root:123456@localhost:3306/FastAPI_first?charset=utf8"
async_engine = create_async_engine(ASYNC_DATABASE_URL,echo=True,  # 可选,输出 SQL 日志pool_size=10,  # 设置连接池活跃的连接数max_overflow=20  # 允许额外的连接数
)# 2. 定义模型类: 基类 + 表对应的模型类
# 基类:创建时间、更新时间;书籍表:id、书名、作者、价格、出版社
class Base(DeclarativeBase):create_time: Mapped[datetime] = mapped_column(DateTime, insert_default=func.now(), default=func.now, comment="创建时间")update_time: Mapped[datetime] = mapped_column(DateTime, insert_default=func.now(), default=func.now, onupdate=func.now(), comment="修改时间")class Book(Base):__tablename__ = "book"id: Mapped[int] = mapped_column(primary_key=True, comment="书籍id")bookname: Mapped[str] = mapped_column(String(255), comment="书名")author: Mapped[str] = mapped_column(String(255), comment="作者")price: Mapped[float] = mapped_column(Float, comment="价格")publisher: Mapped[str] = mapped_column(String(255), comment="出版社")# 3. 建表:定义函数建表 → FastAPI 启动的时候调用建表的函数
async def create_tables():# 获取异步引擎,创建事务 - 建表async with async_engine.begin() as conn:await conn.run_sync(Base.metadata.create_all)  # Base 模型类的元数据创建@app.on_event("startup")
async def startup_event():await create_tables()@app.get("/")
async def root():return {"message": "Hello World"}# 需求:查询功能的接口,查询图书 → 依赖注入:创建依赖项获取数据库会话 + Depends 注入路由处理函数
AsyncSessionLocal = async_sessionmaker(bind=async_engine,  # 绑定数据库引擎class_=AsyncSession,  # 指定会话类expire_on_commit=False  # 提交后会话不过期,不会重新查询数据库
)# 依赖项
async def get_database():async with AsyncSessionLocal() as session:try:yield session  # 返回数据库会话给路由处理函数await session.commit()  # 提交事务except Exception:await session.rollback()  # 有异常,回滚raisefinally:await session.close()  # 关闭会话@app.get("/book/books")
async def get_book_list(db: AsyncSession = Depends(get_database)):# 查询result = await db.execute(select(Book))book = result.scalars().all()return book
http://www.jsqmd.com/news/433169/

相关文章:

  • 09-中间件
  • 2026年3月木材防霉剂厂家推荐,行业测评与实用选择指南 - 品牌鉴赏师
  • 07-自定义响应数据格式
  • 2026年3月热门有气垫橡皮布厂家推荐,速来了解,压电打印喷码机/橙色溶剂墨盒/620迪可橡皮布,橡皮布源头厂家哪家好 - 品牌推荐师
  • 13-ORM-数据库操作-查询数据
  • AI大模型应用开发-LangChain核心组件详解 - 努力-
  • 2026年3月耐火材料分析仪厂家权威推荐,专业适配与行业解决方案! - 品牌鉴赏师
  • 06-响应类型-文件格式
  • IFW Dresden选定Agnitron设备
  • 2025-2026城固装修公司第三方实测报告|城固哪家装修公司靠谱?高性价比透明装修首选金匠装饰 - 一个呆呆
  • 基础篇1
  • 微信小程序开发快速开始 - 努力-
  • 2026年偶联剂厂家实力推荐:偶联剂/钛酸酯偶联剂/铝酸脂偶联剂/硅烷偶联剂/铝钛复合偶联剂/固体钛酸酯偶联剂,专业品牌深度解析与选购指南 - 品牌推荐用户报道者
  • 02-路径参数
  • AI大模型应用开发-LangChain核心组件 - 努力-
  • 04-请求体参数
  • P7521 [省选联考 2021 B 卷] 取模
  • 2026年3月荧光光谱仪厂家推荐,材料元素分析实力厂家 - 品牌鉴赏师
  • 03-查询参数
  • 05-响应类型-HTML格式
  • Pandas学习之DataFrame
  • Godot游戏练习01-第1节-创建玩家场景
  • 20260303之所思 - 人生如梦
  • RHCE定时任务(一)at命令
  • 2026年WordPress运维SEO策略全解析
  • Springboot快速开始 - 努力-
  • Java核心语法-Stream详解 - 努力-
  • 01-路由
  • 2026年3月珠海复式楼装修设计公司推荐:挑空层设计与利用率提升 - 品牌鉴赏师
  • 从“黑盒”到“全景”:在.NET中拥抱OpenTelemetry与SigNoz的可观测工具