orderby 子句中的 web2py 逻辑

web2py logic in orderby clause

我正在使用 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 字符串提供,但随后我需要确保 'my text' 被正确地 SQL 转义(实际字符串由用户)。因此,如果没有办法将逻辑放入 web2py DAL select(orderby=...) 子句中,那么是否有办法转义 SQL 字符串以在 orderby 子句中用作 SQL 语句?

您可以尝试这样的操作:

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

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

使用此方法,您必须手动指定 'DESC' 和 'ASC',而不是使用 ~ 运算符来指示降序。如果需要,您可以编写一个函数来采用您的原始语法并将其转换为类似上面的语法。