我正在使用DAL在web2py中执行db查询,并且我想使用类似于SQL orderby子句的等价物,如下所示:
... ORDER BY table1.col1 = 'my text' DESC, table2.col2 DESC;
但我似乎无法在orderby子句中找到提供逻辑的语法。E、 g.以下是无效语法:
db().select(..., orderby =~ (db.table1.col1=='my text')| db.table2.col2))
我可以将orderby子句作为SQL字符串提供,但是我需要确保“我的文本”是正确的SQL转义的(实际字符串由用户传入)。因此,如果无法将逻辑放入web2py DAL中 select(orderby=...) 子句,那么有没有一种方法可以转义SQL字符串,以便在orderby子句中作为SQL语句使用?
select(orderby=...)
你可以尝试这样的方法:
orderby = [ (db.table1.col1 == user_input, 'DESC'), (db.table2.col2, 'ASC') ] db().select(..., orderby=', '.join('%s %s' % level for level in orderby))
使用此方法,您必须手动指定“DESC”和“ASC”,而不是使用 ~ 运算符指示降序。如果需要,您可以编写一个函数来获取原始语法,并将其转换为类似上面的内容。
~