orderby子句

时间:2016-11-21 17:18:01

标签: sql-order-by web2py

我正在使用DAL在web2py中执行数据库查询,我想使用等效的SQL orderby子句,如下所示:

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

但我似乎无法找出在orderby子句中提供逻辑的语法。例如。以下是无效的语法

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

我可以将orderby子句作为SQL字符串提供,但是我需要确保我的文本'是正确的SQL转义(实际的字符串由用户传入)。因此,如果无法在web2py DAL select(orderby=...)子句中放置逻辑,那么有没有办法将用于orderby子句的SQL字符串转义为SQL语句?

1 个答案:

答案 0 :(得分: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”,而不是使用~运算符来指示降序。如果需要,您可以编写一个函数来获取原始语法并将其转换为类似上面的内容。