Peewee:怎么做 ORDER BY ... NULLS (FIRST|LAST)?

Peewee: how to do ORDER BY ... NULLS (FIRST|LAST)?

标题几乎概括了它:我想指定空值是出现在我的结果中的第一个还是最后一个。在我的具体情况下,我想以降序排序最后得到空值,对应于 SQL ,如下所示:

SELECT id, something, something_else
FROM mytable
ORDER BY something DESC NULLS FIRST;

这是 PostgreSQL 语法(这是我在这个项目中使用的语法)。同样的问题可能适用于其他数据库(尽管我认为 MySQL 不支持该语法,不确定它是否支持该功能)。当然,首先是空值是升序的默认值 (see PostgreSQL docs), so only the combinations DESC NULLS FIRST and ASC NULLS LAST are likely to be useful...except that, conveniently, the MySQL default is precisely the opposite.

看来我应该可以做到以下其中一项:

MyModel.select().order_by(MyModel.something.desc().nulls_first())
MyModel.select().order_by(MyModel.something.desc(nulls_first))

我不是 Python 大师,但我在 Peewee 文档或源代码中找不到任何看起来像我想要的东西。

当然可能有很多解决方法。以下是我发现或想到的,按实用性降序排列(对我而言):

那么:Peewee 能做到吗?如果没有,是否有比我想到的更好的解决方法?

老实说,我认为你把问题复杂化了。

从 Peewee 3.x 开始,您可以指定对空值的处理:

MyModel.select().order_by(MyModel.something.desc(nulls='LAST'))

您还可以使用 case 语句创建一个包含 1 或 0 的别名列,以指示您正在排序的列是否为空。然后按顺序使用该别名。