FastAPI如何高效实现类似Django-filter的大于小于范围筛选?

fastapi如何高效实现类似django-filter的大于小于范围筛选?

FastAPI高效实现数据范围筛选,媲美Django-filter

Django的django-filter库提供便捷的数据库范围筛选功能。本文将探讨如何在FastAPI中高效实现类似功能,无需依赖额外库。

FastAPI本身不包含类似django-filter工具,但我们可以巧妙地利用SQLAlchemy的filter方法和操作符来实现。SQLAlchemy提供强大的ORM功能,方便构建数据库查询。

假设我们有一个名为Series的模型,包含company_idconfirm_atcreated_atrating_score字段。 以下代码演示如何在FastAPI中实现类似django-filter的范围筛选:

from fastapi import FastAPI, Queryfrom sqlalchemy import create_engine, textfrom sqlalchemy.orm import sessionmakerfrom 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 = 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的大于小于范围筛选?的详细内容,更多请关注创想鸟其它相关文章!

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 chuangxiangniao@163.com 举报,一经查实,本站将立刻删除。
发布者:程序猿,转转请注明出处:https://www.chuangxiangniao.com/p/1358621.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2025年12月13日 22:00:14
下一篇 2025年12月13日 22:00:24

相关推荐

发表回复

登录后才能评论
关注微信