我有一个非常标准的设置,并希望按列进行排序:
someselect.order_by(asc(table1.mycol))
但是,我希望''
的{{1}}或NULL
行显示在结果的末尾。有没有办法做到这一点?
答案 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)