
本文介绍如何在FastAPI中高效实现类似Django filter的范围查询功能,以简化数据库查询条件的构建。 Django的django-filter库提供了便捷的范围查询,而FastAPI则需要结合Pydantic模型和SQLAlchemy等ORM框架来实现。
以下是一种基于SQLAlchemy的实现方法:
首先,定义一个Pydantic模型来接收前端的查询参数:
from pydantic import BaseModelfrom typing import Optional, Listfrom datetime import dateclass 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, Dependsfrom sqlalchemy import create_engine, text, funcfrom sqlalchemy.orm import Sessionfrom 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.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, Datefrom sqlalchemy.ext.declarative import declarative_baseBase = 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的范围查询?的详细内容,更多请关注创想鸟其它相关文章!
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 chuangxiangniao@163.com 举报,一经查实,本站将立刻删除。
发布者:程序猿,转转请注明出处:https://www.chuangxiangniao.com/p/1359384.html
微信扫一扫
支付宝扫一扫