2016-12-06 50 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