
本文介绍如何在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号