SQLAlchemy ORM order_by 自定义排序
场景描述
关于产品的排序,需要根据汉字或者不规则顺序和多个字段进行排序
打个比喻:(status==1,modify_user==None,status==3,status==2)
解决办法
使用case来解决。
from sqlalchemy import case query.order_by(case(((User.status =='1',1),(User.modify_user.is_(None),2),(User.status =='3',3),(User.status.is_(None),4),(User.status =='2',5))))
上面的case里面是一个元组,然后(USer.status =='1',1),后面的1代表的是顺序,前面的是筛选条件,下面以此类推。
多字段排序可以用上面的方法,如果只按照一个字段来排序,可以用下面的方法。
from sqlalchemy import case officees_query.order_by(case(value=User.status, where={'1': 1, '3':2, '2': 3}))