利用Python操作MySQL数据库进行数据分页显示

发布时间:2023-05-12

一、准备工作

要进行数据分页显示,需要先连接数据库,并查询出所有相关的数据。这里我们使用 Python 提供的 MySQLdb 库来连接和查询 MySQL 数据库。在开始之前,需要确保以下事项:

  1. 安装好 Python 的 MySQLdb 库。
  2. 已经安装好 MySQL 数据库,并且知道数据库的相关信息,如主机名、用户名和密码等。
  3. 已经创建了相关的数据库和数据表,并且插入了一些测试数据。 这里是连接数据库的代码:
import MySQLdb
conn = MySQLdb.connect(host='localhost', user='root', passwd='password', db='test', charset='utf8')
cursor = conn.cursor()

其中,host 代表主机名,user 代表用户名,passwd 代表密码,db 代表数据库名,charset 代表编码方式。 下面是查询所有数据的代码:

sql = 'select * from student'
cursor.execute(sql)
results = cursor.fetchall()

其中,'select * from student' 是要执行的 SQL 语句,cursor.execute(sql) 会执行该语句并返回结果,fetchall() 会将所有数据都取出来。

二、分页显示数据

在查询出了所有数据之后,就可以进行分页处理了。下面是一个用 Python 处理分页的例子:

page = 1    # 当前页码
pagesize = 10   # 每页显示数量
start_index = (page - 1) * pagesize   # 起始索引
end_index = start_index + pagesize   # 结束索引
paged_results = results[start_index:end_index]

其中,page 表示当前页码,pagesize 表示每页显示数量,start_index 是起始索引,end_index 是结束索引,paged_results 是分页后的结果。

三、将分页结果展示到 HTML 页面中

将分页结果展示到 HTML 页面中,需要使用 Python 提供的 web 框架如 Flask 来实现。下面是一个用 Flask 展示分页数据的例子:

from flask import Flask, render_template, request
app = Flask(__name__)
@app.route('/')
def index():
    page = int(request.args.get('page', 1))
    pagesize = 10
    start_index = (page - 1) * pagesize
    end_index = start_index + pagesize
    sql = "select * from student"
    cursor.execute(sql)
    results = cursor.fetchall()
    paged_results = results[start_index:end_index]
    return render_template('index.html', results=paged_results, page=page)
if __name__ == '__main__':
    app.run(debug=True)

在这个例子中,我们使用 Flask 框架来实现,用 request.args.get('page', 1) 获取 GET 请求中的页码参数,然后进行分页结果的查询和处理,最后使用 render_template() 函数将分页结果展示到 HTML 页面中。

四、HTML 页面展示分页结果

最后,我们需要在 HTML 页面中展示分页结果。可以使用 Bootstrap 等框架来实现分页样式的展示。下面是一个展示分页数据的 HTML 页面:

<!DOCTYPE html>
<html>
<head>
    <title>分页显示数据</title>
    <link rel="stylesheet" href="https://cdn.bootcss.com/bootstrap/3.3.7/css/bootstrap.min.css">
</head>
<body>
    <div class="container">
        <table class="table table-striped">
            <thead>
                <tr>
                    <th>ID</th>
                    <th>姓名</th>
                    <th>性别</th>
                    <th>年龄</th>
                </tr>
            </thead>
            <tbody>
                {% for result in results %}
                <tr>
                    <td>{{ result[0] }}</td>
                    <td>{{ result[1] }}</td>
                    <td>{{ result[2] }}</td>
                    <td>{{ result[3] }}</td>
                </tr>
                {% endfor %}
            </tbody>
        </table>
        <div class="text-center">
            <nav aria-label="Page navigation">
                <ul class="pagination">
                    <li {% if page == 1 %}class="disabled"{% endif %}>
                        <a href="/?page={{ page - 1 }}" aria-label="Previous">
                            <span aria-hidden="true">«</span>
                        </a>
                    </li>
                    {% for i in range(1, 11) %}
                    {% set current_page = page - 5 + i %}
                    {% if current_page > 0 and current_page <= 20 %}
                    <li {% if page == current_page %}class="active"{% endif %}>
                        <a href="/?page={{ current_page }}">{{ current_page }}</a>
                    </li>
                    {% endif %}
                    {% endfor %}
                    <li {% if page == 20 %}class="disabled"{% endif %}>
                        <a href="/?page={{ page + 1 }}" aria-label="Next">
                            <span aria-hidden="true">»</span>
                        </a>
                    </li>
                </ul>
            </nav>
        </div>
    </div>
</body>
</html>