本文介绍如何在FastAPI中高效实现类似Django filter的范围查询功能,以简化数据库查询条件的构建。 Django的django-filter库提供了便捷的范围查询,而FastAPI则需要结合Pydantic模型和SQLAlchemy等ORM框架来实现。
以下是一种基于SQLAlchemy的实现方法:
首先,定义一个Pydantic模型来接收前端的查询参数:
from pydantic import BaseModel from typing import Optional, List from datetime import date class SeriesFilter(BaseModel): company: Optional[List[int]] = None confirm_start: Optional[date] = None confirm_end: Optional[date] = None score_min: Optional[int] = None score_max: Optional[int] = None
接下来,在FastAPI路由函数中,使用接收到的参数构建SQLAlchemy查询:
from fastapi import FastAPI, Depends from sqlalchemy import create_engine, text, func from sqlalchemy.orm import Session from database import Base, engine, get_db # 假设数据库连接和模型定义在database.py中 from models import Series # 假设Series是你的数据库模型 app = FastAPI() Base.metadata.create_all(bind=engine) @app.get("/series/") async def read_series(filter_params: SeriesFilter = Depends(get_db)): #get_db函数需要返回一个数据库session with Session(engine) as db: query = db.query(Series) if filter_params.company: query = query.filter(Series.company_id.in_(filter_params.company)) if filter_params.confirm_start: query = query.filter(Series.confirm_at >= filter_params.confirm_start) if filter_params.confirm_end: query = query.filter(Series.confirm_at <= filter_params.confirm_end) if filter_params.score_min: query = query.filter(Series.rating_score >= filter_params.score_min) if filter_params.score_max: query = query.filter(Series.rating_score <= filter_params.score_max) results = query.all() return results #示例get_db函数 def get_db(): db = SessionLocal() try: yield db finally: db.close() # 假设的数据库模型(database.py) from sqlalchemy import Column, Integer, String, Date from sqlalchemy.ext.declarative import declarative_base Base = declarative_base() class Series(Base): __tablename__ = "series" id = Column(Integer, primary_key=True, index=True) company_id = Column(Integer) confirm_at = Column(Date) rating_score = Column(Integer) # ... other columns
这段代码根据SeriesFilter模型中的参数动态构建SQLAlchemy查询条件。 get_db 函数是一个依赖注入函数,负责创建和管理数据库会话。 请根据你的实际数据库连接信息和模型定义修改database.py和models.py文件。 错误已更正,confirm_at 和 rating_score 的比较操作符已修正。 此方法需要你熟悉SQLAlchemy的使用。 其他ORM框架,例如SQLModel,也可以实现类似的功能。
以上就是FastAPI中如何高效实现类似Django filter的范围查询?的详细内容,更多请关注php中文网其它相关文章!
每个人都需要一台速度更快、更稳定的 PC。随着时间的推移,垃圾文件、旧注册表数据和不必要的后台进程会占用资源并降低性能。幸运的是,许多工具可以让 Windows 保持平稳运行。
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号