利用python对mysql表做全局模糊搜索并分页实例


Posted in Python onJuly 12, 2020

在写django项目的时候,有的数据没有使用模型管理(数据表是动态添加的),所以要直接使用mysql。前端请求数据的时候可能会指定这几个参数:要请求的页号,页大小,以及检索条件。

"""
	tableName: 表名
	pageNum: 请求的页的编号
	pageSize: 每一页的大小
	searchInfo: 需要全局查询的信息
"""
def getMysqlData(tableName, pageNum, pageSize, searchInfo):
	# 使用MySQLdb获取的mysql游标
  cursor = getCursor()
  # 用以获取列标题
  colSql = 'select * from {} limit 1'.format(tableName)
  cursor.execute(colSql)
  columns = [col[0] for col in cursor.description]
  # 转化查询信息为sql
  searchCondition = ','.join(columns)
  searchInfo = "WHERE CONCAT({}) like '%{}%'".format(searchCondition, searchInfo)
  # 用以获取总数
  totalSql = "select count(*) from {} {};".format(tableName, searchInfo)
  cursor.execute(totalSql)
  total = cursor.fetchone()[0]
  # 用以获取具体数据
  limit1 = (pageNum - 1) * pageSize
  limit2 = pageSize
  dataSql = "select * from {} {} limit {},{};".format(tableName, searchInfo, limit1, limit2)
  cursor.execute(dataSql)
  data = [
    dict(zip(columns, row)) 
    for row in cursor.fetchall()
  ]
  return (total, columns, data)

"""
	total: 符合条件的数据总数
	columns: 字段名列表 
	['字段名1', '字段名2', ...]
	data: 数据对象列表 
	[{'字段名1': 数据1,'字段名2':数据1, ...},{'字段名1': 数据2, '字段名2': 数据2, ...}, ...]
"""

补充知识:django 分页查询搜索--传递查询参数,翻页时带上查询参数

django在分页查询的时候,翻页时,v层要传递查询参数,相应的html翻页连接也要带上查询参数

直接上代码

view:

@login_required
def search_name(request):
 
 
  username = request.session.get('user')
  search_name = request.GET.get('name')
  if search_name == None:
    search_name = request.GET.get('name')
 
 
  event_list = Event.objects.filter(name__contains=search_name)
 
  paginator = Paginator(event_list, 2)
  page = request.GET.get('page')
  try:
    contacts = paginator.page(page)
 
  except PageNotAnInteger:
    # 如果page不是整数,取第一页面数据
    contacts = paginator.page(1)
  except EmptyPage:
    # 如果page不在范围内,则返回最后一页数据
    contacts = paginator.page(paginator.num_pages)
 
  return render(request,'event_manage.html',{'user':username,'events':contacts,'name':search_name})

html:

<!--列表分页器-->
  <div class="pagination">
  <span class="step-links">
    {% if events.has_previous %}
      <a href="?page={{ events.previous_page_number }}&&name={{ name }}" rel="external nofollow" >previous</a>
    {% endif %}
    <span class="current">
      Page {{ events.number }} of {{ events.paginator.num_pages }}
 
    </span>
    {% if events.has_next %}
      <a href="?page={{ events.next_page_number }}&name={{ name }}" rel="external nofollow" >next</a>
    {% endif %}
 
  </span>
  </div>
  {% include 'include/pager.html' %}

以上这篇利用python对mysql表做全局模糊搜索并分页实例就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持三水点靠木。

Python 相关文章推荐
pyqt4教程之实现半透明的天气预报界面示例
Mar 02 Python
Python实现向QQ群成员自动发邮件的方法
Nov 19 Python
python开发之for循环操作实例详解
Nov 12 Python
基于Python实现通过微信搜索功能查看谁把你删除了
Jan 27 Python
使用Python编写一个最基础的代码解释器的要点解析
Jul 12 Python
解决pycharm无法调用pip安装的包问题
May 18 Python
python操作小程序云数据库实现简单的增删改查功能
Jun 06 Python
Python 使用指定的网卡发送HTTP请求的实例
Aug 21 Python
基于Python快速处理PDF表格数据
Jun 03 Python
python3中calendar返回某一时间点实例讲解
Nov 18 Python
Django视图类型总结
Feb 17 Python
Python实现Matplotlib,Seaborn动态数据图
May 06 Python
django美化后台django-suit的安装配置操作
Jul 12 #Python
浅谈matplotlib 绘制梯度下降求解过程
Jul 12 #Python
使用matplotlib的pyplot模块绘图的实现示例
Jul 12 #Python
django template实现定义临时变量,自定义赋值、自增实例
Jul 12 #Python
Django后端分离 使用element-ui文件上传方式
Jul 12 #Python
PyQt5-QDateEdit的简单使用操作
Jul 12 #Python
Python logging日志模块 配置文件方式
Jul 12 #Python
You might like
php实现支持中文的文件下载功能示例
2017/08/30 PHP
PHP实现生成模糊图片的方法示例
2017/12/21 PHP
新浪中用来显示flash的函数
2007/04/02 Javascript
Node.js 服务器端应用开发框架 -- Hapi.js
2014/07/29 Javascript
new Date()问题在ie8下面的处理方法
2014/07/31 Javascript
控制台报错object is not a function的解决方法
2014/08/24 Javascript
js自动生成的元素与页面原有元素发生堆叠的解决方法
2014/09/04 Javascript
javascript作用域问题实例分析
2015/07/13 Javascript
JavaScript学习笔记之ES6数组方法
2016/03/25 Javascript
javascript中apply、call和bind的使用区别
2016/04/05 Javascript
jQuery基于$.ajax设置移动端click超时处理方法
2016/05/14 Javascript
bootstrap modal弹出框的垂直居中
2016/12/14 Javascript
js实现4个方向滚动的球
2017/03/06 Javascript
vue父组件通过props如何向子组件传递方法详解
2017/08/16 Javascript
使用JQ完成表格隔行换色的简单实例
2017/08/25 Javascript
vue 组件 全局注册和局部注册的实现
2018/02/28 Javascript
基于vue如何发布一个npm包的方法步骤
2019/05/15 Javascript
解决IOS端微信H5页面软键盘弹起后页面下方留白的问题
2019/06/05 Javascript
koa2 用户注册、登录校验与加盐加密的实现方法
2019/07/22 Javascript
[02:41]2015国际邀请赛中国区预选赛观战指南
2015/05/20 DOTA
[52:22]EG vs VG Supermajor小组赛B组 BO3 第一场 6.2
2018/06/03 DOTA
Python 实现简单的电话本功能
2015/08/09 Python
利用Python中unittest实现简单的单元测试实例详解
2017/01/09 Python
浅谈python正则的常用方法 覆盖范围70%以上
2018/03/14 Python
Python爬虫headers处理及网络超时问题解决方案
2020/06/19 Python
Biblibili视频投稿接口分析并以Python实现自动投稿功能
2021/02/05 Python
css3 给背景设置渐变色的方法
2019/09/12 HTML / CSS
乌克兰的第一家手表店:Deka
2020/03/05 全球购物
一个SQL面试题
2014/08/21 面试题
兼职业务员岗位职责
2014/01/01 职场文书
函授毕业自我鉴定
2014/02/04 职场文书
前台接待岗位职责
2015/02/03 职场文书
党纪处分决定书
2015/06/24 职场文书
Java Kafka 消费积压监控的示例代码
2021/07/01 Java/Android
Redis安装使用RedisJSON模块的方法
2022/03/23 Redis
A22国内电台短波广播频率表
2022/05/10 无线电