Last value of a column QuerySet API (Django)



我想获得一列的最后一个值。我怎样才能拿到呢?SELECT column_name FROM table_name ORDER BY id DESC LIMIT 1的Django查询集的翻译。这在MySQL中工作得很好,但我没有在Django中找到等效的。建议吗?解决方案?

以前,它是一个查询集生成这样的查询集:SELECT MAX(column_name) FROM table_name WHERE column_name_2 = x,但它花了很长时间,我想改变。

谢谢!

您的问题可能是[-1]索引(在python中意味着"获取最后一项")不适用于查询集:

> YourModel.objects.order_by('id')[-1]
Traceback
...
AssertionError: Negative indexing is not supported.

简单的解决方案是颠倒顺序并获得第一个,这正是您在手写的SQL中所做的:

> YourModel.objects.order_by('-id')[0]
<YourModel....>

-放在列名前面会反转排序顺序。这可能就是你需要的提示。

从Django 1.6开始,在查询集上有特殊的.first().last()方法,参见Django的文档。它看起来是这样的:

> YourModel.objects.order_by('id').last()
<YourModel....>

接下来,您只需要获取值。Django有.values().values_list()。如果我只想要单个值的列表,我经常使用.values_list('some single field', flat=True)。在你的例子中:

> YourModel.objects.order_by('id').values_list('column_name', 
                                               flat=True).last()
1234

当然,在这种情况下,仅仅从对象中获取值更短:

> YourModel.objects.order_by('id').last().column_name
1234

等效如下:

YourModel.objects.order_by('column_name')[0]

相关内容

  • 没有找到相关文章

最新更新