Python Pypika:可以动态更改where子句中的运算符吗

Python Pypika:可以动态更改where子句中的运算符吗,python,sql,Python,Sql,我正在使用Pypika查询HDB。通常我创建查询,然后添加where子句,如下所示: query = query.where(table.ID == value) operator = '==' query = query.where(table.ID {operator} value) 现在我不知道将使用哪个操作符。我可以是任何可能的操作员: ['==', '<>', '<', '>', '<=', '>='] 谢谢你的意见 PS:不确定你在这里是不是

我正在使用Pypika查询HDB。通常我创建查询,然后添加where子句,如下所示:

query = query.where(table.ID == value)
operator = '=='
query = query.where(table.ID {operator} value)
现在我不知道将使用哪个操作符。我可以是任何可能的操作员:

['==', '<>', '<', '>', '<=', '>=']
谢谢你的意见


PS:不确定你在这里是不是这样做的:也许有人可以为Pypika库添加一个标签

我看到你在大约30天前发布了这个,所以我希望你在这期间找到了解决方案。但是,如果您没有-我遇到了同样的问题,以下内容对我很有用:编写一个函数,从
operator
模块获取一个运算符,并生成查询:

from pypika import Table, Field, Query
from typing import List, Callable
import operator


def gen_my_query(varname: str, 
             my_operator: Callable, 
             permitted_value: int, 
             my_table: str, 
             selected_vars: List[str]):

    my_query = Query.from_(Table(my_table)
                          ).select(','.join(selected_vars)
                          ).where(
                                  my_operator(Field(varname), permitted_value)
                          ).get_sql(quote_char=None)

    return my_query
该功能可按如下方式使用:

gen_my_query(varname='id', 
             my_operator=operator.eq, 
             permitted_value=1, 
             my_table='table', 
             selected_vars=["var1", "var2", "var3"])
这将产生以下结果:

'SELECT var1,var2,var3 FROM table WHERE id=1'
如果要继续使用定义为字符串的运算符,可以在字典中定义映射,并重构上述函数以从dict中获取正确的运算符,例如:

my_operators = {'==': operator.eq,
                '<': operator.le} # ... etc.
my_operators={'=':operator.eq,
'
my_operators = {'==': operator.eq,
                '<': operator.le} # ... etc.