You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何为Peewee查询结果添加从1开始的自定义行号(SQLite)

为Peewee查询结果添加从1开始的行号

针对你的需求,有两种可行方案:

方案1:SQLite窗口函数实现(数据库层面生成行号)

SQLite 3.25及以上版本支持ROW_NUMBER()窗口函数,可直接在查询中生成从1开始的行号。修改代码如下:

from peewee import fn

@staticmethod
def getTop(guild:Guild, count) -> list[Ranking]:
    try:
        # 追加行号字段,按points降序生成序号
        query = (Ranking
                .select(Ranking, fn.ROW_NUMBER().over(order_by=-Ranking.points).alias('row_number'))
                .where(Ranking.guild_id == guild.id)
                .order_by(-Ranking.points)
                .limit(count))
        # 为每个Ranking实例绑定行号属性
        result = []
        for item in query:
            item.row_number = item.row_number
            result.append(item)
        return result
    except:
        return []

注意:需确保SQLite版本≥3.25,若版本过低建议升级。

方案2:Python遍历添加行号

如果不想依赖数据库特性,直接在查询结果返回后通过Python遍历添加行号,兼容性更强:

@staticmethod
def getTop(guild:Guild, count) -> list[Ranking]:
    try:
        rankings = list(Ranking.select()
                        .where(Ranking.guild_id == guild.id)
                        .order_by(-Ranking.points)
                        .limit(count))
        # 从1开始为每条记录添加行号属性
        for idx, rank in enumerate(rankings, start=1):
            rank.row_number = idx
        return rankings
    except:
        return []

两种方案对比:

  • 方案1适合需要在SQL查询中使用行号做进一步逻辑处理的场景;
  • 方案2更轻量化,无需修改SQL结构,仅用于结果展示时更合适。

内容的提问来源于stack exchange,提问作者Mike

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.13 02:49:58