前提:
- 不使用Flask-SQLAlchemy来操作数据库及分页等,直接使用pymysql连接数据库
- 使用pymysql连接到数据库后,通过执行查询语句获取到数据库字段值
连接数据库
__init__.py
version = 'Release'
Release = {
'Mysql': {'username': '用户名', 'password': '密码', 'dbName': '数据库名'},
...
'Host': {'address': 'ip地址(可以是127也可以是0)', 'port': '端口号'},
...
}
...
- connMysql.py
## 自定义一个连接数据库的方法(新建一个py文件)
# 分页获取数据
def test1(table_name, data):
## Release['MysqlIpOut']['HOST']:需要在__init__.py中定义好,写上后会提示需要导入
dbIP = Release['MysqlIpOut']['HOST']
# 连接数据库
mysql_connect = pymysql.connect(host=dbIP,
user=Release['Mysql']['username'],
password=Release['Mysql']['password'],
database=Release['Mysql']['dbName'],
charset="utf8",
port=3306,
cursorclass=pymysql.cursors.DictCursor)
cursor = mysql_connect.cursor()
# 查询语句
sql = "SELECT" + data + "FROM `" + table_name + "`"
try:
# 执行sql语句
cursor.execute(sql)
# 提交更改为稳定存储
mysql_connect.commit()
# fetchall:获取所有行
results = cursor.fetchall()
except:
results = {'code': '102'}
finally:
# 关闭连接
mysql_connect.close()
return results
实现分页
- app.py
- 通过参考网上案例实现
http://t.csdn.cn/HKoh0
# 测试分页
@app1.route('/test')
def page_test():
# 获取数据库中的数据(使用connMysql.py中写好的方法来查)
content = test1('demo', '*')
# print(len(content), type(content), content) # 测试输出
# 每一页显示记录数
pageSize = 5
page = request.args.get('page', 1, type=int)
# 为了处理用户输入的超出页码范围的数字,添加以下代码
if page > len(content) or page < 1:
page = 1
# 对获取到的数据进行切片
start = (page - 1) * pageSize # 开始,每一页开始位置
end = start + pageSize # 结束,每一页结束位置
slices = slice(start, end)
slicontent = content[slices] # 切片
"""
query: 我们要分页的集合对象,content为要分页的对象
page:当前请求的页码
per_page:每页的数据个数,自定义
total:数据总量,也就是共有19条数据
items:当前页需要显示的数据,因为页码是从1开始的,而列表的索引是从0开始的,所以要处理好这种转化关系。我们的例子是每页只显示5条数据,还比较好计算,如果是多条数据,计算的时候要细心一些
"""
# 下面就是得到的某一页的分页对象
current_page = Pagination(content, page=page, per_page=pageSize, total=len(content), items=content[page-1])
# print(type(current_page), current_page) # 测试输出
total_page = current_page.total # 共有几条数据
context = {
'content': content, # 获取到的数据库的数据
'total_page': total_page, # 共有几条数据
'slicontent': slicontent, # 数据切片显示
}
return render_template("test.html", **context)
前端页面
分页栏使用的是Bootstrap框架封装好的分页效果
参考:http://t.csdn.cn/7lVQG
- test.html
<!DOCTYPE html>
<html lang="en">
<head>
<link rel="stylesheet" href="https://cdn.bootcss.com/bootstrap/3.3.7/css/bootstrap.min.css">
<meta charset="UTF-8">
<title>分页展示</title>
</head>
<body>
<div align="center">
<h2>用户信息</h2>
<br><br>
{% for cu in slicontent %}
编号:{{ cu['id'] }},姓名:{{ cu['name'] }},年龄:{{ cu['age'] }} <br><br>
{% endfor %}
<div>
{{ current_page.links }} {# 分页栏 #}
共有{{ total_page }}条数据
</div>
</div>
</body>
</html>
实现效果
通过输入 ip:开放的端口/test 进行访问
补充:flask_paginate相关参数介绍
参数 | 作用 |
---|---|
items | 当前页面中的记录信息,也就是分页查出来的数据 |
query | 分页的源查询 |
page | 当前页数 |
prev_num | 上一页的页数 |
next_num | 下一页的页数 |
has_next | 是否有下一页,如果有返回true |
has_prev | 是否有上一页,如果有返回true |
pages | 按照每页显示的记录条数得出的总页数 |
per_page | 每页显示的记录条数 |
total | 查询返回的记录总数 |
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
文章由极客之音整理,本文链接:https://www.bmabk.com/index.php/post/114870.html