場景描述
今天在工作時肋殴,碰到一個問題囤锉。關于產品的排序,需要根據(jù)status來排序护锤,status的值為(1,2,3)官地,排序的方式是(1,3,2),這并不算完蔽豺,需要在1,3中間加入另外一個字段叫modify_user==None区丑。
也就是說最后的排序是(status==1,modify_user==None,status==3,status==2)。
由于sqlalchemy用的并不是很熟修陡,剛剛開始根本想不到方法。后面無意中加現(xiàn)有一個case的方法可霎。
后面自己就搗鼓了一下就解決了問題魄鸦。
解決方法
使用case來解決。
from sqlalchemy import case
offices_query.order_by(case(((ResourcesOffice.status =='1',1),(ResourcesOffice.modify_user.is_(None),2),(ResourcesOffice.status =='3',3),(ResourcesOffice.status.is_(None),4),(ResourcesOffice.status =='2',5))))
上面的case里面是一個元組癣朗,然后(ResourcesOffice.status =='1',1)拾因,后面的1代表的是順序,前面的是篩選條件旷余,下面以此類推绢记。
多字段排序可以用上面的方法,如果只按照一個字段來排序正卧,可以用下面的方法蠢熄。
from sqlalchemy import case
officees_query.order_by(case(value=ResourcesOffice.status, where={'1': 1, '3':2, '2': 3}))
這樣就可以實現(xiàn)自定義排序。
sql語句
用case出來的sql語句炉旷。
通過sql語句看签孔,還是很清楚的叉讥。
結束