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

13-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"}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))  # 查询 → 返回一个 ORM 对象# book = result.scalars().all()  # 获取所有# book = result.scalars().first()  # 获取第一个book = await db.get(Book, 5)  # 获取单条数据 → 根据主键return book
http://www.jsqmd.com/news/433164/

相关文章:

  • 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的可观测工具
  • TS+VUE3
  • 深入解析Qt事件处理机制:从原理到实战,构建响应式GUI应用
  • LeetCode 378 有序矩阵中第 K 小的元素:python3 题解
  • LeetCode 88 合并两个有序数组:python3 题解
  • Python核心语法-文件操作、os模块和常用标注库 - 努力-