Kev*_*rke 18 pagination sqlalchemy
我需要从大表的所有行读取数据,但我不想一次将所有数据都拉入内存.是否有一个SQLAlchemy函数将处理分页?也就是说,将几行拉入内存,然后在必要时获取更多行.
我知道你可以这样做limit,offset正如本文所暗示的那样,但如果我不需要,我宁愿不处理.
rad*_*los 25
如果您使用的是Flask-SqlAlchemy,请参阅的paginate方法query.paginate提供了几种简化分页的方法.
record_query = Record.query.paginate(page, per_page, False)
total = record_query.total
record_items = record_query.items
Run Code Online (Sandbox Code Playgroud)
第一页应为1,否则.total返回异常除以零
Cub*_*t88 12
如果你不使用瓶,你可以使用SQLAlchemy功能“片”或“限制”和“抵消”组合,提到这里。例如:
some_query = Query([TableBlaa])
query = some_query.limit(number_of_rows_per_page).offset(page_number*number_of_rows_per_page)
# -- OR --
query = some_query.slice(page_number*number_of_rows_per_page, (page_number*number_of_rows_per_page)+number_of_rows_per_page)
current_pages_rows = session.execute(query).fetchall()
Run Code Online (Sandbox Code Playgroud)
如果你正在构建一个与ReactJs、vueJs或其他前端框架一起使用的 api ,你可以像这样处理:
注意:
page:您需要的当前页面
error_out: 不显示错误
max_per_page或per_page:极限
文档: SqlAchemy 分页
record_query = Record.query.paginate(page=*Number*, error_out=False, max_per_page=15)
result = dict(datas=record_query.items,
total=record_query.total,
current_page=record_query.page,
per_page=record_query.per_page)
Run Code Online (Sandbox Code Playgroud)
在 record_query 上,您可以使用:
下一个(error_out=假)
返回下一页的分页对象。
next_num
下一页的编号
页 = 无
当前页码(1 个索引)
页
总页数
per_page = 无
要在页面上显示的项目数。
上一个(error_out=假)
返回上一页的分页对象。
上一个编号
上一页的编号。
查询 = 无
用于创建此分页对象的无限制查询对象。
总计 = 无
与查询匹配的项目总数
希望对你有帮助!
| 归档时间: |
|
| 查看次数: |
35787 次 |
| 最近记录: |