2016-11-21 75 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