Python如何实现MySQL分页:高效查询与代码示例
Python实现MySQL分页的核心方法是结合SQL的LIMIT和OFFSET子句,通过数据库游标或ORM框架(如SQLAlchemy)来分批获取数据。 这种方法能有效减少单次查询的数据量,提升应用性能并降低内存消耗,下面将详细说明具体实现步骤、代码示例以及注意事项。
使用原生SQL实现分页
通过Python的MySQL连接库(如mysql-connector-python或pymysql),可以直接执行带LIMIT和OFFSET的SQL语句。

import pymysql
# 连接数据库
connection = pymysql.connect(host='localhost', user='root', password='123456', database='test_db')
cursor = connection.cursor()
# 分页参数
page_num = 2 # 第2页
page_size = 10 # 每页10条
offset = (page_num - 1) * page_size
# 执行分页查询
sql = "SELECT * FROM users LIMIT %s OFFSET %s"
cursor.execute(sql, (page_size, offset))
results = cursor.fetchall()
for row in results:
print(row)
cursor.close()
connection.close()
关键点:OFFSET计算需注意页码从1开始,避免数据错位。
使用ORM框架SQLAlchemy分页
对于大型项目,推荐使用ORM工具简化操作,SQLAlchemy提供了limit()和offset()方法:
from sqlalchemy import create_engine, Table, MetaData
from sqlalchemy.sql import select
# 创建引擎
engine = create_engine('mysql+pymysql://root:123456@localhost/test_db')
metadata = MetaData()
users = Table('users', metadata, autoload_with=engine)
# 分页查询
page_num = 3
page_size = 15
offset = (page_num - 1) * page_size
stmt = select(users).limit(page_size).offset(offset)
with engine.connect() as conn:
results = conn.execute(stmt)
for row in results:
print(row)
优势:ORM自动处理SQL注入风险,并支持更复杂的查询逻辑。
分页性能优化建议
- 避免大偏移量:当
OFFSET值很大时(如翻到第1000页),MySQL需扫描大量跳过数据,可能导致性能下降,可改用基于游标的分页,通过记录上一页最后一条数据的ID进行条件查询:SELECT * FROM users WHERE id > last_id LIMIT page_size;
- 索引优化:确保
ORDER BY和WHERE涉及的字段已建立索引,特别是排序字段。 - 总页数计算:获取总记录数时,使用
COUNT(*)可能较慢,可考虑缓存结果或使用近似值。
完整分页函数示例
以下是一个封装好的分页函数,支持返回数据及分页信息:
def paginate_query(connection, table_name, page_num=1, page_size=20, order_by='id'):
cursor = connection.cursor()
# 计算总记录数
cursor.execute(f"SELECT COUNT(*) FROM {table_name}")
total_records = cursor.fetchone()[0]
# 计算总页数
total_pages = (total_records + page_size - 1) // page_size
# 分页查询
offset = (page_num - 1) * page_size
cursor.execute(f"SELECT * FROM {table_name} ORDER BY {order_by} LIMIT %s OFFSET %s",
(page_size, offset))
data = cursor.fetchall()
cursor.close()
return {
'data': data,
'page_num': page_num,
'page_size': page_size,
'total_pages': total_pages,
'total_records': total_records
}
Python实现MySQL分页主要依赖LIMIT/OFFSET机制,结合适当的性能优化手段,可高效处理大规模数据查询。 在实际开发中,根据应用场景选择原生SQL或ORM框架,并注意偏移量过大时的替代方案,以确保分页功能既灵活又稳定,通过合理设计,分页不仅能提升用户体验,还能显著减轻数据库负载。
未经允许不得转载! 作者:HTML前端知识网,转载或复制请以超链接形式并注明出处HTML前端知识网。
原文地址:https://www.html4.cn/16520.html发布于:2026-09-13





