在sqlalchemy中,有没有一种方法可以排序,以便空单元格无论是排序顺序还是排序顺序?

时间:2017-06-05 19:02:04

标签: python sqlalchemy

我有一个非常标准的设置,并希望按列进行排序:

someselect.order_by(asc(table1.mycol))

但是,我希望''的{​​{1}}或NULL行显示在结果的末尾。有没有办法做到这一点?

2 个答案:

答案 0 :(得分:6)

SQLAlchemy对NULLS LAST表达式有一个ORDER BY修饰符:

sqlalchemy.sql.expression.nullslast(column)

请参阅http://docs.sqlalchemy.org/en/latest/core/sqlelement.html#sqlalchemy.sql.expression.nullslast

答案 1 :(得分:2)

在支持NULLS LAST的数据库上,您可以通过

NULL进行排序。
SELECT * FROM table1 ORDER BY mycol ASC NULLS LAST;

您需要将''转换为NULL,以便您可以执行此操作(无论如何我建议您这样做),无论是在数据中还是作为查询的一部分:

SELECT * FROM table1 ORDER BY (CASE mycol WHEN '' THEN NULL ELSE mycol END) ASC NULLS LAST;

或者,更便携的方法是

SELECT * FROM table1 ORDER BY (CASE WHEN mycol IS NULL OR mycol = '' THEN 1 ELSE 0 END) ASC, mycol;

在SQLAlchemy中写这个:

.order_by(case([(or_(tabel1.mycol.is_(None), table1.mycol == ""), 1)],
               else_=0), table1.mycol)