1

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

是否可以通过单个查询来实现此功能,并且只需更改变量?我已经查找了通配符或无关运算符,但除了 % 在这种情况下不起作用之外,我找不到任何其他运算符。

显然,我可以制作一堆 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' 则无效

4

1 回答 1

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_varor hand_varis时'all',每个表达式的第一部分OR始终为真,因此 的分支AND始终为真并匹配所有记录,即,它在查询中是无操作的。

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

于 2013-08-09T17:25:44.947 回答