如何使用cursor为后端
时间: 2025-02-20 22:28:19 浏览: 30
如何在后端实现游标分页
游标分页是一种高效的分页方法,尤其适用于大数据量场景。相比于传统的基于 LIMIT
和 OFFSET
的分页方式,游标分页通过保存上一次查询的结果标识符(通常是时间戳或自增ID),从而避免了随着偏移量增加而导致性能下降的问题。
游标分页的工作原理
每次请求时,客户端传递上次获取到的最后一项记录的唯一标识作为参数传送给服务器;服务端则依据此条件读取下一批次的数据并返回给前端展示[^2]。
对于 MySQL 数据库而言,可以通过主键 ID 或者创建时间字段来构建游标的逻辑:
- 如果表中有唯一的递增主键,则可以直接利用该列;
- 若无合适的自然顺序字段可用,则可考虑引入额外的时间戳字段辅助排序。
实现游标分页的具体步骤
假设有一个名为 posts
的文章列表表单,其中包含 id
, title
, created_at
字段。为了简化说明,这里仅讨论按发布时间降序排列的情况。
Python Flask 后端示例代码
from flask import Flask, request, jsonify
import mysql.connector
app = Flask(__name__)
def get_db_connection():
connection = mysql.connector.connect(
host='localhost',
user='root',
password='',
database='testdb'
)
return connection
@app.route('/api/posts')
def posts():
cursor_id = request.args.get('cursor') or '9999-12-31' # 默认最大日期
conn = get_db_connection()
cur = conn.cursor(dictionary=True)
query = """
SELECT id, title FROM posts WHERE created_at < %s ORDER BY created_at DESC LIMIT 10;
"""
cur.execute(query, (cursor_id,))
rows = cur.fetchall()
next_cursor = None
if len(rows) > 0:
last_item = rows[-1]
next_cursor = str(last_item['created_at'])
response_data = {
"data": [{"id": row["id"], "title": row["title"]} for row in rows],
"nextCursor": next_cursor,
}
cur.close()
conn.close()
return jsonify(response_data)
if __name__ == '__main__':
app.run(debug=True)
上述代码展示了如何在一个简单的 RESTful API 中应用游标分页机制。每当接收到新的分页请求时,都会根据提供的游标值从数据库中检索最新的十条记录,并将最后一个项目的创建时间设置为下一个游标的值以便后续加载更多内容[^4]。
相关推荐

















