【问题标题】:web2py logic in orderby clauseorderby 子句中的 web2py 逻辑
【发布时间】:2016-11-21 17:18:00
【问题描述】:

我正在使用 DAL 在 web2py 中执行 db 查询,并且我想使用类似这样的 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=...) 子句中放入逻辑,那么有没有办法将 SQL 字符串转义,以便在 orderby 子句中作为 SQL 语句使用?

【问题讨论】:

    标签: sql-order-by web2py


    【解决方案1】:

    你可以试试这样的:

    orderby = [
        (db.table1.col1 == user_input, 'DESC'),
        (db.table2.col2, 'ASC')
    ]
    
    db().select(..., orderby=', '.join('%s %s' % level for level in orderby))
    

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

    【讨论】:

    • 谢谢!一如既往地乐于助人和快速。你的解决方案正是我所需要的,只有python语法需要",".join('%s %s' % level for level in orderby)
    猜你喜欢
    • 1970-01-01
    • 2011-10-17
    • 2017-04-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-06-03
    • 1970-01-01
    • 2014-11-23
    相关资源
    最近更新 更多