如何枚举Django中返回的行?

问题描述 投票:0回答:1

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

即,

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

输出...

0 Mary
1 John
2 Nikita
3 Fred

在这种特殊情况下,我想在SQL后端执行此操作,而不是简单地在查询结果周围包装enumerate()

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

django postgresql
1个回答
0
投票

这可以使用Django 1.x中的annotate完成:

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表达式来完成。

© www.soinside.com 2019 - 2024. All rights reserved.