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

14-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()  # 关闭会话# 需求:路径参数 书籍id
@app.get("/book/get_book/{book_id}")
async def get_book_list(book_id: int, db: AsyncSession = Depends(get_database)):result = await db.execute(select(Book).where(Book.id == book_id))book = result.scalar_one_or_none()return book# 需求:条件 价格大于等于200
@app.get("/book/search_book")
async def get_search_book(db: AsyncSession = Depends(get_database)):result = await db.execute(select(Book).where(Book.price >= 200))books = result.scalars().all()return books
http://www.jsqmd.com/news/478736/

相关文章:

  • 混频器在雷达模块中的作用及原理……
  • 大模型中量化是什么
  • Django中间件
  • 解决brew安装慢问题
  • 我看见ta拿着枪指着我的头
  • 斯坦福 CS336 从零构建大模型 (2025 春) - 第四讲:专家混合模型(Mixture of Experts, MoE)
  • Claude code学习记录
  • 性价比高的律师营销机构有啥特色?这3点让你秒懂!
  • ITSM 实战:多门店报障如何做统一受理、派单和 SLA 升级,避免群里越报越乱
  • 我在凌晨醒来
  • 八大应用场景解析:企业如何利用AI重塑业务流程?
  • 任务书被导师打回两次后,我用了这个工具——5分钟写出他当场点头的版本!
  • SpringBoot如何调用节假日API
  • OpenClaw 的产品形态和运作原理
  • ABAQUS模拟Oxford Space Systems太阳能帆板展开与折叠过程:从完全展开状...
  • 第一章:人工智能的起源:达特茅斯之梦
  • SD 图生图模式
  • Hadoop 2.7.3 集群部署、配置与环境变量调优全流程总结
  • 面试常问:TCP相关(中级篇)问题原因即解决方案
  • Google 26NG SDE VO 三轮面经|真实全程复盘,避坑要点全整理
  • 商务请客,没带“名牌酒”怎么开场?这3句话,比砸钱更显品位
  • 如何在虚拟机部署单机rabbitmq 3.8.30
  • 399 元杀龙虾服务爆火!OpenClaw 养虾人连夜卸载,背后扎心风险深度拆解
  • 从构建到 IPA 保护,Flutter iOS 包如何做混淆与安全处理
  • 基于PLC级联Mach-Zehnder干涉仪的O波段400GHz平顶梳状滤波器设计
  • 数据结构初阶——二叉树之——堆的实现
  • Markdown编辑器语法
  • 量化策略样本内外划分_防止过拟合
  • Maven依赖下载网址
  • redis windows环境配置读写分离:一主一从 + Sentinel 完整实战