首页 > 数据库 > SQLAlchemy学习-13.分页查询'Query' object has no attribute 'paginate'

SQLAlchemy学习-13.分页查询'Query' object has no attribute 'paginate'

时间:2023-10-10 21:12:38浏览次数:45  
标签:13 SQLAlchemy no paginate 查询 offset page size

前言

用过Flask-SQLAlchemy的应该知道, 它提供了一个分页查询方法 paginate(),方便我们实现在后端查询分页。
但是单独使用SQLAlchemy 却没有paginate方法,会报错:AttributeError: 'Query' object has no attribute 'paginate'

SQLAlchemy 没有paginate方法

Flask-SQLAlchemy 分页查询参考https://www.cnblogs.com/yoyoketang/p/16720577.html
在 SQLAlchemy 中单独使用paginate方法

query_objs = session.query(Project)
page_objs = query_objs.paginate(
        page=1,
        per_page=10,
        error_out=False,
        max_per_page=100
    )

运行后发现报错了AttributeError: 'Query' object has no attribute 'paginate'
因为SQLAlchemy是没有paginate方法的,paginate是flask_sqlalchemy中才有的方法

实现分页查询

我们想单独使用SQLAlchemy 实现分页功能,比如fastapi 中单独使用SQLAlchemy,sqlalchemy提供了实现分页查询的方法:即 offset(偏移量) 与 limit(数据条数限制)。
前端一般用page和size查询,如/project?page=1&size=10 查询第1页,每页显示10条数据。
于是我们需要自己转换下,把sqlalchemy自带的 offset(偏移量)与 limit(数据条数限制),转成page和size

其中limit 和 size 意思是一样的,每次输出的数量限制
offset = (page - 1) * size

示例1:/project?page=1&size=5 查询第1页,每页显示5条数据。

page = 1
size = 5
offset_data = (page - 1) * size
res = session.query(models.Project).offset(offset_data).limit(size)
print(res.all())  # [<Project(id='1',...)>, <Project(id='2',...)>, <Project(id='3',...)>, <Project(id='4',...)>, <Project(id='5',...)>]

查询到前5个数据。

示例2:/project?page=2&size=3 查询第2页,每页显示3条数据。

page = 2
size = 3
offset_data = (page - 1) * size
res = db.query(models.Project).offset(offset_data).limit(size)
print(res.all()) # [<Project(id='4', ...)>, <Project(id='5', ...)>, <Project(id='6', ...)>]

标签:13,SQLAlchemy,no,paginate,查询,offset,page,size
From: https://www.cnblogs.com/yoyoketang/p/17755759.html

相关文章

  • SQLAlchemy学习-12.查询之 order_by 按desc 降序排序
    前言sqlalchemy的query默认是按id升序进行排序的,当我们需要按某个字段降序排序,就需要用到order_by。order_by排序默认情况下sqlalchemy的query默认是按id升序进行排序的res=session.query(Project).all()print(res)#[<Project(id='1',project_name='string'.........
  • 13-io扩展技术与存储器映射扩展
    IO扩展技术与存储器映射扩展io扩展方式代码如下:#include<REGX52.H>voidDelay_ms(unsignedintxms){ unsignedinti,j; for(i=0;i<xms;i++){ for(j=0;j<299;j++); }}void_74HC138(unsignedcharn){ switch(n){ case4: P2=(P2&0x1f......
  • CSP模拟51联测13 B.狗
    CSP模拟51联测13B.狗目录CSP模拟51联测13B.狗题目大意题目描述输入格式输出格式样例样例1inputoutput思路题目大意题目描述小G养了很多狗。小G一共有\(n\timesn\)条狗,在一个矩阵上。小G想让狗狗交朋友,一条狗狗最多只能交一个朋友,不必所有狗狗都有朋友。但是狗狗交朋友......
  • [NOIP2011 提高组] 铺地毯
    题目描述为了准备一个独特的颁奖典礼,组织者在会场的一片矩形区域(可看做是平面直角坐标系的第一象限)铺上一些矩形地毯。一共有\(n\)张地毯,编号从\(1\)到\(n\)。现在将这些地毯按照编号从小到大的顺序平行于坐标轴先后铺设,后铺的地毯覆盖在前面已经铺好的地毯之上。地毯铺设......
  • JSONObject.toJSONString 详细介绍
    JSONObject.toJSONString详细介绍StringjsonString=JSONObject.toJSONString(sendMap,SerializerFeature.DisableCircularReferenceDetect);JSONObject.toJSONString:这是FastJSON中的一个方法,用于将Java对象转换为JSON字符串。sendMap:这是要被转换成JSON......
  • LY1376 [ 20231008 NOIP 模拟赛 T0 ] 递增路径
    题意\(A\),\(B\)两人轮流在一张图上移动一个点。要求这次移动的边权必须大于上次的。\(A\)希望游戏进行的轮数多,\(B\)希望游戏进行的轮数少。对于每个\(s=1,2,...,n\)作为起点,若双方都采用最优策略,游戏会进行多少轮。Sol考虑将所有边按照从大到小的顺序排序。每......
  • 2021-2022 ACM-ICPC Nordic Collegiate Programming Contest (NCPC 2021) gym 104670
    原题容易想到最短路DAG求出来,起初我以为要求最小割,但这是错误的,因为可能有多条边联通了一个点的情况,这时候选择最小割不一定是最优的我们猜想一个思路:答案一定是包含\(1\)号节点的连通块全部填\(N\),剩下的填\(S\)。发现在最短路DAG中,\(1\rightarrown\)的所有路径......
  • [arc135f] Delete 1, 4, 7, ...
    F-Delete1,4,7,...设\(f(i)\)表示第一次操作后,第\(i\)个位置的数,那么\(f(i)=\lfloor\frac{3i+1}2\rfloor\)那么\(k\)次操作后,第\(i\)个位置上的数就是:\[f(f(...f(f(i))...))=f^k(i)\]设\(cnt_k\)表示\(k\)次操作后剩下的数的个数,那么显然有:\(cnt_i=\lfloor\frac{cnt_......
  • 洛谷P3300 [SDOI2013] 城市规划 题解
    [SDOI2013]城市规划题意:给你一个\(6\timesn\)的网格题,单点修改,询问区间联通块数,\(n\le10^5\)。解:看起来就很显然的一道题......线段树每个点用一个ufs维护连通性;我为了方便思考把图转成横着的了。写起来真是毒瘤......重点在于:\(\bullet\)1、建立叶节点。\(\bull......
  • Non-terminating decimal expansion; no exact representable decimal result.
    上网查了一下这个异常的,找到了原因所在:通过BigDecimal的divide方法进行除法时当不整除,出现无限循环小数时,就会抛异常:java.lang.ArithmeticException:Non-terminatingdecimalexpansion;noexactrepresentabledecimalresult. 解决的办法就是给divide方法设置精确的小......