代码之家  ›  专栏  ›  技术社区  ›  rrauenza

如何枚举Django中返回的行?

  •  0
  • rrauenza  · 技术社区  · 7 年前

    类似于Python的 enumerate() 很好,我想为返回的每一行分配一个唯一的递增整数。(不是行id,而是结果中的行号!)

    i、 e。,

    for p in models.People.objects.all().values('N', 'name'):
       print p['N'], p['name']
    

    输出为。。。

    0 Mary
    1 John
    2 Nikita
    3 Fred
    

    在这种情况下,我希望在SQL后端执行此操作,而不是简单地包装 枚举() 围绕查询结果。

    我也不希望在数据发生变化的查询中枚举是稳定的。

    1 回复  |  直到 7 年前
        1
  •  2
  •   rrauenza    7 年前

    这可以通过 annotate 在Django 1。x:

    from django.db.models.expressions import RawSQL                                 
    
    qry = models.People.objects.all().\
        annotate(N=RawSQL('row_number() over ()', [])).\
        values('N', 'name')
    for p in qry:
        print p['N'], p['name']
    

    在Django 2.0中,可以使用 Window 表达式使用 RowNumber