总结
豆包 AI 助手文章总结

FastAPI中如何高效实现类似Django filter的范围查询?

碧海醫心
发布: 2025-03-15 09:06:01
原创
910人浏览过

fastapi中如何高效实现类似django filter的范围查询?

本文介绍如何在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中文网其它相关文章!

最佳 Windows 性能的顶级免费优化软件
最佳 Windows 性能的顶级免费优化软件

每个人都需要一台速度更快、更稳定的 PC。随着时间的推移,垃圾文件、旧注册表数据和不必要的后台进程会占用资源并降低性能。幸运的是,许多工具可以让 Windows 保持平稳运行。

下载
来源:php中文网
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
最新问题
豆包 AI 助手文章总结
开源免费商场系统广告
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送
PHP中文网APP
随时随地碎片化学习
PHP中文网抖音号
发现有趣的

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号