You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

JS+Flask项目如何实现数据库分页,解决Datatables服务端计数异常问题

分页实现侧的选择

首先明确:必须在Flask侧实现分页。
你当前已经开启了Datatable的serverSide: true服务端模式,这种设计本身就是要求后端承接分页逻辑:JS侧分页本质还是一次性拉取全量数据,大数据量下加载慢、浏览器卡顿的问题根本无法解决,只有后端分页每次只返回当前页的少量数据,才能真正解决可用性问题。

计数为0的异常原因

你看到的Showing 0 to 0 of 0 entries (filtered from NaN total entries)报错,是因为服务端模式下Datatable要求后端返回固定格式的响应,你当前的接口没有返回draw、recordsTotal、recordsFiltered这几个必填的统计字段,前端无法解析总数据量,才会出现计数异常。

具体改造方案

1. 后端Flask接口改造

以你当前的SQL查询场景为例,不需要SQLAlchemy,直接修改原生SQL和接口返回逻辑即可:

from flask import request, jsonify
# 引入你自己用的数据库操作依赖,比如pymysql/psycopg2等,替换下方的execute_sql为你自己的查询方法

@app.route('/api/information', methods=['GET'])
def get_information():
    # 接收Datatable自动传递的分页参数
    draw = int(request.args.get('draw', 1))
    start = int(request.args.get('start', 0)) # 当前页起始索引,从0开始
    page_size = int(request.args.get('length', 10)) # 每页显示条数

    # 第一步:查询全量数据总条数,用于前端计数
    count_sql = "SELECT COUNT(*) AS total FROM alvaro.alcatraz_kongo"
    total_count = execute_sql(count_sql)[0]['total'] # 替换为你自己的查询执行逻辑,拿到总条数

    # 第二步:拼接分页查询SQL,增加LIMIT和OFFSET实现分页
    data_sql = """
        SELECT 
            name AS Name, 
            phone AS Phone, 
            adress AS Adress
        FROM alvaro.alcatraz_kongo
        LIMIT %s OFFSET %s
    """
    # 执行查询,参数顺序先传每页条数,再传起始索引
    page_data = execute_sql(data_sql, (page_size, start)) # 替换为你自己的参数化查询逻辑

    # 第三步:按照Datatable要求的格式返回响应
    return jsonify({
        "draw": draw, # 请求标识原封不动返回,避免前端请求错乱
        "recordsTotal": total_count, # 全量数据总条数
        "recordsFiltered": total_count, # 未做搜索过滤时和总条数一致即可
        "data": page_data # 当前页的业务数据
    })

2. 前端细节检查

  • 确认你代码里的接口路径/api/infrmation没有拼写错误,正确路径应该和后端接口保持一致(示例中是/api/information)
  • 确认SQL查询返回的字段别名和前端columns配置的字段名完全匹配,大小写也要对应,否则会出现列渲染为空的问题

扩展说明

如果后续需要接入搜索、排序功能,只需要在SQL中增加对应的WHERE、ORDER BY逻辑,同时将recordsFiltered返回为过滤后的总条数即可;如果使用的是不支持LIMIT/OFFSET语法的数据库(比如Oracle),替换为对应数据库的分页语法即可。

内容的提问来源于stack exchange,提问作者jaxon0x0x

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.02 04:48:01