美文网首页高天一的博客
SQLAlchemy orm使用笔记: order_by多种条件

SQLAlchemy orm使用笔记: order_by多种条件

作者: 高天一 | 来源:发表于2017-08-11 17:29 被阅读0次

    场景描述

    今天在工作时,碰到一个问题。关于产品的排序,需要根据status来排序,status的值为(1,2,3),排序的方式是(1,3,2),这并不算完,需要在1,3中间加入另外一个字段叫modify_user==None。

    也就是说最后的排序是(status==1,modify_user==None,status==3,status==2)。

    由于sqlalchemy用的并不是很熟,刚刚开始根本想不到方法。后面无意中加现有一个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}))

    这样就可以实现自定义排序。

    sql语句

    用case出来的sql语句。

    通过sql语句看,还是很清楚的。

    sql语句

    结束

    相关文章

      网友评论

        本文标题:SQLAlchemy orm使用笔记: order_by多种条件

        本文链接:https://www.haomeiwen.com/subject/qsrrrxtx.html