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