使用和和或

时间:2018-11-19 14:55:01

标签: python database sqlalchemy

首先感谢您的帮助。

我的问题是我必须用很多输入来查询服务器。我正在更新一个网页,该网页过去只接受一个输入,但是现在,我创建了一个复选框,以便用户在查询时可以具有更大的灵活性:

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过滤过去的条件?

谢谢!

1 个答案:

答案 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 ))