2016-02-01 2 views
0

Есть 3 рядаВозможно ли упорядочение по приоритету в SQLAlchemy?

| Name | State | 
| 1 | Busy | 
| 2 | Online | 
| 3 | Offline | 

Я хочу, чтобы дать приоритет "онлайн"> "занят"> "отсутствует"

heroes = HeroModel.query.\ 
      filter(HeroModel.id.in_(hero_ids)).\ 
      order_by(???????). \ 
      all() 

Как я могу заказать? а не по алфавиту.

+1

, к какой базе данных вы подключаетесь? – Utsav

+0

Вы должны использовать целые числа для состояний, и тогда упорядочение будет простым. – doru

ответ

0

использовать что-то вроде этого в вашем запросе на выборку

case state 
when 'online' then 1 
when 'offline' then 2 
else 3 
end as rnk 

и использовать заказ на на этом производный столбец rnk

order by rnk 
0

Вы можете попробовать это в SQLAlchemy (если вы используете Oracle или MySQL):

heroes = HeroModel.query.\ 
      filter(HeroModel.id.in_(hero_ids)).\ 
      order_by(
      case(
       [(HeroModel.state == "online", 0), 
       (HeroModel.state == "busy", 1), 
       (HeroModel.state == "offline", 2)], 
       else_=3). \ 
     all() 
Смежные вопросы