gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-30 23:34:24 24 4
gpt4 key购买 nike

我有一个 SQLite 查询,它取决于 2 个变量:性别和手。其中每个值都可以有 3 个值,其中 2 个值实际上表示某种含义(例如男/女和左/右),第三个值是“全部”。如果变量的值为“all”,那么我不关心该列的特定值是什么。

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

显然,我可以制作一堆 if 语句,并对每种情况使用不同的查询,但这不是很优雅。

代码:

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

即如果 sex_val = 'male' 且 hand_var = 'left' 则此查询有效,但如果 sex_val 或 hand_var = 'all' 则此查询无效

最佳答案

您确实可以通过单个查询来完成此操作。只需将每个变量与查询中的'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 中动态构建查询可能会更好,但是,它只包含您实际需要测试的字段。它可能会明显更快,但您必须对其进行基准测试才能确定。

关于python - “不关心”SQLite 查询中的列?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18152178/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com