2016-12-06 45 views
1

假设我有一个Inventory表,其中status列有以下可能的值:无效,to_order,优先级,接收和排序。如何使用sqlalchemy按列表排序结果?

当我查询数据库,我想为了在这个秩序中的地位列:

to_order, priority, received, ordered, voided. 

我如何使用SQLAlchemy通过清单顺序为了我的结果吗?

我的出发点是这样的:sort = desc(Inventory.status),我不知道如何定义我自己的排序顺序。

+0

如果这个顺序被重用,那么一个选项是创建(或扩展)'InventoryStatus'表,其中将包含诸如'name'和'sort_order'等列。然后,您的查询可以加入到此表中,并按照来自连接表的列来排序结果。我经常有其他限定符/标志列,用于其他目的。例如,可以使用标记'completed'(对于'received'和'voided'来说为True)来指示不需要用户操作。 – van

回答

0

您将不得不求助于ORDER BY + CASE组合。

首先谈论纯SQL,看看this example

ORDER BY (
    CASE currency_code 

    WHEN 'USD' 
    THEN 1 

    WHEN 'EUR' 
    THEN 2 

    ... 

    END 
) ASC 

幸运的是,这是可以做到的正是这种在SQLAlchemy的的ORM,结合order_bycase