首先感谢您的帮助。
我的问题是我必须用很多输入来查询服务器。我正在更新一个网页,该网页过去只接受一个输入,但是现在,我创建了一个复选框,以便用户在查询时可以具有更大的灵活性:
query = session.query(table_name).filter(and_(*conditions) , or_(*multiple_choice_filter))
在多项选择是带有[[A],“ B”]这样的字母的列表的情况下 条件是条件列表:
table_name.c.column_1.op('~*')(filter_1))
过去,除了初始条件外,没有其他任何东西,但现在我要添加复选框。
现在有人如何在查询中结合使用multi_choice_filter过滤过去的条件?
谢谢!
答案 0 :(得分:0)
我找到了解决方法。我的问题是将AND与OR链接起来。
首先,创建过滤器:
conditions = []
因为and语句非常简单:
conditions.append(table_name.c.column_name_1.op('~*')(value_1))
conditions.append(table_name.c.column_name_2.op('~*')(value_2))
conditions.append(table_name.c.column_name_3.op('~*')(value_3))
query = session.query(table_name).filter(and_(*conditions)).order_by(table_name.c.column_name_1)
翻译成:
SELECT * FROM table_name WHERE (column_name_1 == value_1 AND column_name_2 == value_2 AND column_name_3 == value_3)
现在,使用OR和AND链接条件:
我们使用了两个不同的变量:一个用于AND语句(与上述完全相同),另一个用于下一个变量:
filter_or_1.append(table_name.c.column_name_4.op('~*')(value_4))# First possible value for the OR statement
filter_or_1.append(table_name.c.column_name_4.op('~*')(value_5))# Second possible value for the OR statement
filter_or_1.append(table_name.c.column_name_4.op('~*')(value_6))# Third possible value for the OR statement
,查询将是:
query = session.query(table_name).filter(and_(*conditions) , and_(or_(*filter_or_1))).order_by(table_name.c.column_name_1)
翻译成:
SELECT * FROM table_name WHERE (column_name_1 == value_1 AND column_name_2 == value_2 AND column_name_3 == value_3 AND(column_name_4==value_4 OR column_name_4==value_5 column_name_4==value_6 ))