2013-04-03 57 views
30

我正在使用Flask和SQLAlchemy。Multiple order_by sqlalchemy/Flask

比方說,我有一個用戶模型,字段'流行'和'date_created'。我想要執行以下查詢:

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

如何在SQLAlchemy中執行多個order_by? 對於單一的一個,這個工程:

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

我應該再添ORDER_BY?或者把我的當前order_by中的流行度和date_created放在一起?我希望人氣優先於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)。所有()' '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),他們確實是一樣的,和正確的一個。對不起,非常感謝你的回答! –