我有一个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'则不行
答案 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_var
或hand_var
为'all'
时,每个OR
表达式的第一部分始终为true,因此AND
的分支是始终为true并匹配所有记录,即在查询中它是无操作。
在Python中动态构建查询可能更好,但是,它只包含您实际需要测试的字段。它可能明显更快,但您必须对此进行基准测试才能确定。