2016-11-21 99 views
0

我在web2py中使用DAL執行數據庫查詢,我想使用SQL排序依據子句的像這樣的等價物:web2py的邏輯

... ORDER BY table1.col1 = 'my text' DESC, table2.col2 DESC; 

但我似乎無法正常工作outby orderby子句中提供邏輯的語法。例如。以下是無效的語法

db().select(..., orderby =~ (db.table1.col1=='my text')| db.table2.col2)) 

我公司可提供的排序依據條款作爲SQL字符串,但我需要確保「我的文字」是正確的SQL轉義(實際字符串傳遞中用戶)。因此,如果沒有辦法將邏輯放在web2py DAL select(orderby=...)子句中,那麼是否有辦法將用於orderby子句的SQL字符串轉義爲SQL語句?

回答

2

你可以嘗試這樣的事:

orderby = [ 
    (db.table1.col1 == user_input, 'DESC'), 
    (db.table2.col2, 'ASC') 
] 

db().select(..., orderby=', '.join('%s %s' % level for level in orderby)) 

使用這種方法,您必須手動指定「DESC」和「ASC」,而不是使用~運營商表示降序排列。如果需要,您可以編寫一個函數來獲取原始語法並將其轉換爲上述內容。

+1

謝謝!一如既往的有用和快速。您的解決方案正是我所需要的,只有python語法需要'','。join('%s%s'order by levelby level')''。 – user2667066

+0

哎呀,很好。剛更新了答案。 – Anthony