2013-04-03 4 views
30

Я использую Flask и SQLAlchemy.Несколько order_by sqlalchemy/Flask

Предположим, у меня есть модель пользователя с популярностью полей и 'date_created'. Я хочу сделать следующий запрос:

SELECT * FROM user ORDER BY popularity DESC, date_created DESC LIMIT 10 

Как сделать несколько order_by в SQLAlchemy? Для одну, это работает:

User.query.order_by(User.popularity.desc()).limit(10).all() 

Должен ли я просто добавить еще один order_by? Или добавьте как популярность, так и date_created в моем текущем order_by? Я хочу, чтобы популярность имела приоритет для date_created для заказа.

спасибо!

ответ

46

Это должно работать

User.query.order_by(User.popularity.desc(),User.date_created.desc()).limit(10).all() 
+0

Ну дело в том, что я попытался 'User.query.order_by (User.popularity.desc(), User.date_created.desc()). Предел (10). all() ' ' User.query.order_by (User.popularity.desc()). order_by (User.date_created.desc()). limit (10) .all() ' ' User.query.order_by (User.date_created.desc()). Limit (10) .all() ' , и они дают мне разные результаты ... Так что кажется, что предоставление второго order_by не отменяет первого одно не добавляет условие заказа к первому? –

+0

(и ни один из этих запросов не сработает, все они дают мне результаты, я просто не знаю, какой из первых двух я хочу) –

+3

Хорошо, на самом деле оба дают мне тот же ответ, и я выяснил, SQL-запрос (благодаря http://stackoverflow.com/questions/4617291/how-do-i-get-a-raw-compiled-sql-query-from-a-sqlalchemy-expression), и они действительно одинаковы, и правильный. Извините, и большое вам спасибо за ваш ответ! –