“不关心”SQLite查询中的列?

时间:2013-08-09 17:17:05

标签: python sqlite

我有一个SQLite查询,它取决于2个变量,性别和手。这些中的每一个都可以有3个值,2个实际意味着什么(所以男性/女性和左/右),第三个是“全部”。如果变量的值为“all”,那么我不关心该列的特定值是什么。

是否可以通过单个查询实现此功能,只需更改变量?我已经看过一个通配符或者不关心运算符,但除了在这种情况下不起作用的%之外,还没有找到任何一个。

显然我可以制作一堆if语句,并为每个案例使用不同的查询,但这不是很优雅。

代码:

select_sql = """    SELECT * FROM table
                    WHERE (gender = ? AND hand = ?)
             """
cursor.execute(select_sql, (gender_var, hand_var))

即。如果gender_val ='male'和hand_var ='left',则此查询有效,但如果gender_val或hand_var ='all'则不行

1 个答案:

答案 0 :(得分:3)

您确实可以使用单个查询执行此操作。只需将每个变量与查询中的'all' 进行比较。

select_sql = """  SELECT * FROM table
                  WHERE ((? = 'all' OR gender = ?) AND (? = 'all' OR hand = ?))
             """

cursor.execute(select_sql, (gender_var, gender_var, hand_var, hand_var))

基本上,当gender_varhand_var'all'时,每个OR表达式的第一部分始终为true,因此AND的分支是始终为true并匹配所有记录,即在查询中它是无操作。

在Python中动态构建查询可能更好,但是,它只包含您实际需要测试的字段。它可能明显更快,但您必须对此进行基准测试才能确定。