fastapi-分页查询

温馨提示: 读完本文大约需要 3 分钟;这是一篇技术类文章;需要对fastapi有一定的了解;代码部分横屏观看更佳。

前言

最近在使用FastApi为后端框架进行一个项目的开发,在FastApi使用过程中,遇到了分页查询的问题,特此记录一下,以便以后查阅。

分页查询在业务逻辑开发过程中是比较常见的一种需求,在Django框架中直接使用其本身携带的插件即可,非常的方便。在fastapi框架中,找了一大圈,没有找到相关的说明,但是有一个比较直接的方式可以解决分页查询问题

分页查询初尝试
  1. 使用offset关键字当做页码
  2. 使用limit关键字当做每一页显示的数据的条数

查询语句如下:

def get_cases(db: Session, skip: int = 0, limit: int = 100):
    """
    查询用例列表

    :param db:
    :param skip:
    :param limit:
    :return:
    """
    return db.query(Case).filter(Case.is_delete == 0).offset(skip).limit(limit).all()
对查询语句进行优化

上面的查询语句存在一个问题,skip这个参数不是真正的页码,这里需要进行优化下:

def get_cases(db: Session, skip: int = 0, limit: int = 100):
    """
    查询用例列表

    :param db:
    :param skip:
    :param limit:
    :return:
    """
    return db.query(Case).filter(Case.is_delete == 0).offset(skip * limit).limit(limit).all()

offset的地方加上skip *limit即可完美解决

使用过程中踩过的坑
  1. 在入口函数入参颠倒
@app.get("/cases", response_model=List[case_schema.CaseSchemaDetail])
async def read_cases(db: SessionLocal = Depends(get_db), skip=0, limit=100):
    """
    查询用例列表

    :param db: db session
    :param skip: 页码
    :param limit: 每页数据个数
    :return:
    """
    return case_crud.get_cases(db, skip=skip, limit=limit)

优化后:

@app.get("/cases", response_model=List[case_schema.CaseSchemaDetail])
async def read_cases(skip=0, limit=100, db: SessionLocal = Depends(get_db)):
    """
    查询用例列表

    :param db: db session
    :param skip: 页码
    :param limit: 每页数据个数
    :return:
    """
    return case_crud.get_cases(db, skip=skip, limit=limit)
  1. skiplimit 入参没有声明类型,导致错误:TypeError: can't multiply sequence by non-int of type 'str'

优化前:

@app.get("/cases", response_model=List[case_schema.CaseSchemaDetail])
async def read_cases(skip=0, limit=100, db: SessionLocal = Depends(get_db)):
    """
    查询用例列表

    :param db: db session
    :param skip: 页码
    :param limit: 每页数据个数
    :return:
    """
    return case_crud.get_cases(db, skip=skip, limit=limit)

优化后:

@app.get("/cases", response_model=List[case_schema.CaseSchemaDetail])
async def read_cases(skip: int = 0, limit: int = 100, db: SessionLocal = Depends(get_db)):
    """
    查询用例列表

    :param db: db session
    :param skip: 页码
    :param limit: 每页数据个数
    :return:
    """
    return case_crud.get_cases(db, skip=skip, limit=limit)

每日踩一坑,生活更轻松。

本期分享就到这里啦。祝君在测开之路上越走越顺,越走越远。

gzh:测开工程师的烦恼

  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值