连接数据库前提:
- 不使用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
分页展示
用户信息
{% for cu in slicontent %}
编号:{{ cu['id'] }},姓名:{{ cu['name'] }},年龄:{{ cu['age'] }}
{% endfor %}
{{ current_page.links }} {# 分页栏 #}
共有{{ total_page }}条数据
实现效果
补充:flask_paginate相关参数介绍通过输入 ip:开放的端口/test 进行访问
| 参数 | 作用 |
|---|---|
| items | 当前页面中的记录信息,也就是分页查出来的数据 |
| query | 分页的源查询 |
| page | 当前页数 |
| prev_num | 上一页的页数 |
| next_num | 下一页的页数 |
| has_next | 是否有下一页,如果有返回true |
| has_prev | 是否有上一页,如果有返回true |
| pages | 按照每页显示的记录条数得出的总页数 |
| per_page | 每页显示的记录条数 |
| total | 查询返回的记录总数 |



