· 约 3 分钟

25-FastAPI进阶-ORM操作数据-查询总结

  • FastAPI
  • Python

学习目标

查询知识点总表

综合案例

from typing import Annotated

from fastapi import Query
from sqlalchemy import func, select


@app.get("/users/advanced-search")
def advanced_search(
    db: DbSession,
    keyword: Annotated[str | None, Query()] = None,
    department: Annotated[str | None, Query()] = None,
    page: Annotated[int, Query(ge=1)] = 1,
    size: Annotated[int, Query(ge=1, le=20)] = 5,
):
    stmt = select(User)

    if keyword:
        stmt = stmt.where(User.name.contains(keyword))
    if department:
        stmt = stmt.where(User.department == department)

    total_stmt = select(func.count()).select_from(stmt.subquery())
    total = db.scalar(total_stmt) or 0

    stmt = stmt.order_by(User.id).offset((page - 1) * size).limit(size)
    users = db.scalars(stmt).all()

    return {
        "total": total,
        "items": [UserOut.model_validate(user) for user in users],
    }

案例理解

易错点

我的补充