2013-07-01 53 views
0

我在我的表中有state列,它有以下可能的值:discharged,in processNoneSqlalchemy order_by custom order?

我可以按以下順序取得所有記錄:in process,discharged其次是None

回答

1

如果您已將該列聲明爲枚舉類型(對於這些值來自小的固定字符串集合的情況,您應該這樣做),那麼在該列上使用ORDER BY將根據枚舉值的聲明順序。所以該列的數據類型應該是ENUM('in process', 'discharged', 'None');這會導致ORDER BY按照您的要求排序。具體而言,枚舉中的每個值都分配了一個數字索引,並且該索引在比較枚舉值時用於排序目的。 (您應該聲明一個枚舉的確切方式將根據您使用的後端類型而有所不同。)

+0

是slqlachmey,python或sql的enum函數的一部分嗎? – TheOne

+0

有時使用字符串代替枚舉會繞過一些中間步驟,特別是在打印漂亮的字符串時。 – TheOne

+0

它是SQL的一部分;它是在聲明模式時使用的數據類型,如'VARCHAR'。 SQLAlchemy知道這種類型,就像它知道其他基本類型一樣,它有一個內置的[映射到它的類](http://docs.sqlalchemy.org/en/rel_0_8/core/types.html?突出=枚舉#sqlalchemy.types.Enum)。 – Alp