代码之家  ›  专栏  ›  技术社区  ›  user2667066

orderby子句中的web2py逻辑

  •  0
  • user2667066  · 技术社区  · 9 年前

    我正在使用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语句使用?

    1 回复  |  直到 9 年前
        1
  •  2
  •   Anthony    9 年前

    你可以尝试这样的方法:

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

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

    推荐文章