
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方法和比较操作符(>=, <=)构建数据库查询。 通过Query参数,可以灵活地接收用户输入的筛选条件。 Optional[List[int]]和Optional[str]确保参数可以为空,避免报错。 代码清晰简洁,易于理解和维护,有效地实现了FastAPI中的范围筛选功能,与django-filter的功能类似。 请记住替换 "你的数据库连接字符串" 为你实际的数据库连接信息,并且确保Series模型已正确定义。
以上就是FastAPI如何高效实现类似Django-filter的大于小于范围筛选?的详细内容,更多请关注php中文网其它相关文章!
每个人都需要一台速度更快、更稳定的 PC。随着时间的推移,垃圾文件、旧注册表数据和不必要的后台进程会占用资源并降低性能。幸运的是,许多工具可以让 Windows 保持平稳运行。
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号