FastAPI如何高效实现类似Django-filter的大于小于范围筛选?(高效.小于.筛选.大于.类似...)
FastAPI高效实现数据范围筛选,媲美Django-filter
Django的django-filter库提供便捷的数据库范围筛选功能。本文将探讨如何在FastAPI中高效实现类似功能,无需依赖额外库。
FastAPI本身不包含类似django-filter的工具,但我们可以巧妙地利用SQLAlchemy的filter方法和操作符来实现。SQLAlchemy提供强大的ORM功能,方便构建数据库查询。
假设我们有一个名为Series的模型,包含company_id、confirm_at、created_at和rating_score字段。 以下代码演示如何在FastAPI中实现类似django-filter的范围筛选:
from fastapi import FastAPI, Query from sqlalchemy import create_engine, text from sqlalchemy.orm import sessionmaker from typing import List, Optional # ... (数据库连接配置) ... engine = create_engine("你的数据库连接字符串") # 请替换为你的数据库连接字符串 SessionLocal = sessionmaker(autocommit=False, autoflush=False, bind=engine) app = FastAPI() @app.get("/series") async def get_series( company: Optional[List[int]] = Query(None), confirm_start: Optional[str] = Query(None), confirm_end: Optional[str] = Query(None), score_min: Optional[int] = Query(None), score_max: Optional[int] = Query(None), ): with SessionLocal() as db: query = db.query(Series) # Series 为你的数据库模型 if company: query = query.filter(Series.company_id.in_(company)) if confirm_start: query = query.filter(Series.confirm_at >= confirm_start) if confirm_end: query = query.filter(Series.confirm_at <= confirm_end) if score_min: query = query.filter(Series.rating_score >= score_min) if score_max: query = query.filter(Series.rating_score <= score_max) results = query.all() return results
这段代码利用SQLAlchemy的filter方法和比较操作符(>=,
以上就是FastAPI如何高效实现类似Django-filter的大于小于范围筛选?的详细内容,更多请关注知识资源分享宝库其它相关文章!