1、显示效果

界面主要由两部分完成
顶部搜索栏:按条件传参给后端请求,控制表格数据重载刷新
底部表格:接收后端返回JSON数据,对表格渲染显示

2、前端传参

前端采用Layui框架渲染,对页码和条数传参给后台做条件查询;
得到后端返回数据,对前端表格进行重载刷新

顶部搜索栏HTML

<div class="layui-col-md12 x-so"><input class="layui-input" autocomplete="off" placeholder="开始日" name="start" id="start"><input class="layui-input" autocomplete="off" placeholder="截止日" name="end" id="end"><input type="text" name="keyword" id="keyword" placeholder="搜索关键字" autocomplete="off" class="layui-input"><button class="layui-btn" id="serach" data-type="reload"><i class="layui-icon"></i></button>
</div>

表格渲染

var table = layui.table;
table.render({elem: '#allData', id: 'allDataTable', height: 400   //容器高度, url: '/query' //数据接口, method: 'post', where: {name: 'test',startDate:'',endDate: '',keyword: ''} // 默认传参 limit,page, page: true    //开启分页, limits: [10, 50, 100, 500, 1000]  // 显示页数, cols: [[      //表头{field: 'host', title: 'Host', width: 130, sort: true, fixed: 'left'}, {field: 'address', title: '地址', width: 150, sort: true}, {field: 'user', title: '用户名', width: 85, sort: true}, {field: 'pw', title: '密码', width: 100, sort: true}, {field: 'new_user', title: '新增用户', width: 95, sort: true}, {field: 'new_pw', title: '新增密码', width: 95, sort: true}, {field: 'systemt', title: '系统配置', width: 95, sort: true}, {field: 'UpdateTime', title: '更新时间', width: 145, sort: true}, {field: 'mark', title: '备注', width: 70, sort: true}, {field: 'target', title: '来源', width: 80}]]
});

表格重载

var active = {reload: function () {var _startDate = $('#start').val();var _endDate = $('#end').val();var _keyword = $('#keyword').val();var index = layer.msg('查询中,请稍等...', {icon: 16, time: false, shade: 0});setTimeout(function () {table.reload('allDataTable', { // 重载表格page: {curr: 1}, // 重新从第一页开始where: {startDate: _startDate,endDate: _endDate,keyword: _keyword}});layer.close(index);}, 800);}
};
$('#serach').on('click', function () {var type = $(this).data('type');active[type] ? active[type].call(this) : '';
});

3、后端接收请求

设定POST请求方式,通过 request.form 接收前端参数
路由共实现两个数据查询的功能(Filter)

1、查询总数
query(db.func.count(table.c.host)).scalar()
2、查询条目明细
dquery(table).filter(rule).limit(limit).offset((int(page) - 1))

根据 Layui 官方默认的JSON数据样式,最终返回格式如下:
{ "code": 0,"msg": "","count": 1000,"data": [{}, {}]}

完整代码:

@app.route('/query', methods=['POST'])
def query():form_dict = request.formname = form_dict['name']limit = form_dict['limit']page = form_dict['page']startDate = form_dict['startDate']endDate = form_dict['endDate']keyword = form_dict['keyword']data = {"code": 0, "msg": "Successful", }try:table = all_table[name]_count = db.session.query(db.func.count(table.c.host)).scalar()# result = db.session.query(table).all()# result = db.session.query(table).filter(table.c.address.like('%上海%')).limit(limit).offset((int(page) - 1))if keyword == '':if startDate == '' or endDate == '':rule = table.c.host.like('%.%')_count = db.session.query(db.func.count(table.c.host)).scalar()else:rule = table.c.UpdateTime.between(startDate, endDate)_count = db.session.query(db.func.count(table.c.host)).filter(rule).scalar()else:if startDate == '' or endDate == '':rule = or_(table.c.host.like('%' + str(keyword) + '%'),table.c.address.like('%' + str(keyword) + '%'),table.c.user.like('%' + str(keyword) + '%'),table.c.pw.like('%' + str(keyword) + '%'),table.c.new_user.like('%' + str(keyword) + '%'),table.c.new_pw.like('%' + str(keyword) + '%'),table.c.target.like('%' + str(keyword) + '%'),table.c.systemt.like('%' + str(keyword) + '%'),table.c.mark.like('%' + str(keyword) + '%'))_count = db.session.query(db.func.count(table.c.host)).filter(rule).scalar()else:rule = and_(table.c.UpdateTime.between(startDate, endDate),or_(table.c.host.like('%' + str(keyword) + '%'),table.c.address.like('%' + str(keyword) + '%'),table.c.user.like('%' + str(keyword) + '%'),table.c.pw.like('%' + str(keyword) + '%'),table.c.new_user.like('%' + str(keyword) + '%'),table.c.new_pw.like('%' + str(keyword) + '%'),table.c.target.like('%' + str(keyword) + '%'),table.c.systemt.like('%' + str(keyword) + '%'),table.c.mark.like('%' + str(keyword) + '%')))_count = db.session.query(db.func.count(table.c.host)).filter(rule).scalar()result = db.session.query(table).filter(rule).limit(limit).offset(int(page) - 1))data['count'] = _countdata['data'] = [x._asdict() for x in result]# UpdateTime日期格式化输出for i in range(len(data['data'])):if data['data'][i]['UpdateTime']:data['data'][i]['UpdateTime'] = data['data'][i]['UpdateTime'].strftime("%Y-%m-%d %H:%M:%S")except Exception as err:data['code'] = 1data['msg'] = 'Failed! {}'.format(err)return jsonify(data)

Tip:
Flask sqlalchemy 映射关联已存在表的两种方法
Table 数据表格官方文档 - layui.table

关于博主

喜欢就点赞 or 赞赏。
3.65元,一年365天继续分享创作!

Flask+MySQL大数据表格分页显示相关推荐

  1. 应用displaytag完成大数据量分页显示的例子

    应用displaytag在struts中完成大数据量分页显示,Oracle数据库 JSP文件: <%...@ taglib uri="/WEB-INF/displaytag.tld&q ...

  2. MySQL大数据量分页查询方法及其优化

    点击上方 好好学java ,选择 星标 公众号 重磅资讯.干货,第一时间送达 今日推荐:收藏了!7 个开源的 Spring Boot 前后端分离优质项目个人原创+1博客:点击前往,查看更多 链接:ht ...

  3. mysql大数据量分页的一些做法

    随着公司业务的增长,数据库的数据也呈指数级增长,拿订单表为例,之前公司的订单表每天只有几千个,一个月下来不超过十万.而现在每天的订单大概就是2w+,目前订单表的数据已经达到了700w.这带来了各种各样 ...

  4. easyui分页查询为什么会有下拉框_6个针对MySQL大数据量分页查询优化的锦囊妙计...

    作者:大神养成记转载来源:http://sina.lt/gauW 方法1: 直接使用数据库提供的SQL语句 语句样式: MySQL中,可用如下方法: SELECT * FROM 表名称 LIMIT M ...

  5. 千锋重庆Java学习之MySQL大数据量分页查询方法及其优化

    方法1: 直接使用数据库提供的SQL语句 语句样式: MySQL中,可用如下方法: SELECT * FROM 表名称 LIMIT M,N 适应场景: 适用于数据量较少的情况(元组百/千级) 原因/缺 ...

  6. MYSQL大数据量分页查询优化 - 十万、百万级优化

    1. 常见问题 在mysql大数据量的基础下,分页中随着页码的增加,查询时间也会响应的增加.所以到了百万级别的数据量时,我们就需要优化已有的查询代码进行合理有效的分页. 一般情况下,页码与查询时间成正 ...

  7. mysql一样的查询在我本地很快但是线上很慢_MySQL大数据量分页查询方法及其优化...

    MySQL大数据量分页查询方法及其优化 ---方法1: 直接使用数据库提供的SQL语句 ---语句样式: MySQL中,可用如下方法: SELECT * FROM 表名称 LIMIT M,N ---适 ...

  8. MySQL 和 Oracle 大数据量分页查询方法及其优化

    MySQL大数据量分页查询方法及其优化 ---方法1: 直接使用数据库提供的SQL语句 ---语句样式: MySQL中,可用如下方法: SELECT * FROM 表名称 LIMIT M,N ---适 ...

  9. 千万级别数据查询优化_MySQL大数据量分页查询方法及其优化

    MySQL大数据量分页查询方法及其优化 ---方法1: 直接使用数据库提供的SQL语句 ---语句样式: MySQL中,可用如下方法: SELECT * FROM 表名称 LIMIT M,N ---适 ...

最新文章

  1. 跨域部署Silverlight时需要注意的问题
  2. LeetCode 1952. 三除数
  3. finditerable 转list_Iterable/Iterator 转 list
  4. 使用AsyncEnumerator简化异步操作
  5. typescript parseint不能传number_Typescript 使用日志
  6. 深度学习各场景评估指标总结
  7. [转]ViewPagerindicator 源码解析
  8. 【安全风险通告】Apache ShardingSphere远程代码执行漏洞安全风险通告
  9. 通过swagger下载的文件乱码解决方法,求解
  10. 汇编学习--7.16--直接定址表
  11. VisionMaster基础版教程汇总
  12. MachineLearning:一、什么是机器学习
  13. 辅音字母组合功能音中的浊化现象
  14. IOS 开发学习29 Socket框架 AsynSocket的使用
  15. 健身健美补剂之蛋白粉
  16. 小兔子乖乖用计算机,宝贝宝贝歌词说说:两只老虎爱跳舞,小兔子乖乖拔萝卜...
  17. The Auto-extending innodb_system data file './ibdata1' is of a different size 6400 pages (rounded do
  18. 十步会用IOCOMP–iplotx控件
  19. ununtu20.04系统中如何划词翻译_接住了!有了这几个翻译软件,英语渣渣也能轻松读文献...
  20. 局域网有几台电脑频繁断网_电脑经常自动断网掉线分析

热门文章

  1. 当哪种公司做什么性质的销售才能够拿到高工资的探讨
  2. springboot集成达梦数据库及SET IDENTITY_INSERT为ON时问题
  3. 【面试题】Java常见面试题集锦
  4. 50岁失业,还要继续打拼吗?
  5. 那些正在消失的 Flash 网站
  6. 程序员的内功心法-AVL树
  7. symbian,windows mobile,Palm和Linux
  8. 人脸识别除了可以破案,还能制造冤案...
  9. 高效程序员必备的六大命令行工具
  10. 「每日分享」Java程序员的荣光,听R大论JDK11的ZGC