我想获得一列的最后一个值。我怎样才能拿到呢?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]