
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方法和比较操作符(>=,

