sqlalchemy中的query默认是按id升序进行排序的,当遇到复杂情况时就需要时用order_by。
下面介绍几种order_by 的几种使用方法
session.query(User).order_by(User.create_time.desc()).all()
from sqlalchemy import desc
query.order_by(desc(Usser_ID)).all()
order_by多种条件自定义排序
需要根据status来排序,status的值为(1,2,3),排序的方式是(1,3,2),还需要在1,3中间加入另外一个字段modify_user==None。
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}))