温馨提示: 读完本文大约需要 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测开工程师的烦恼

原文地址:https://blog.csdn.net/weixin_43988672/article/details/126334533

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任

如若转载,请注明出处:http://www.7code.cn/show_21166.html

如若内容造成侵权/违法违规/事实不符,请联系代码007邮箱suwngjj01@126.com进行投诉反馈,一经查实,立即删除

发表回复

您的电子邮箱地址不会被公开。 必填项已用 * 标注