Python sqlite3 动态占位符构建 where 条件
我有一个表单,里面有4个输入框。当我点击提交按钮时,会根据这4个输入框的内容从数据库中获取结果。我并没有强制用户填写任何内容,所以用户可能会留空所有输入框,或者只填写部分。如果用户填写的内容越多,从数据库得到的结果就会越准确。
我遇到的问题是,如何动态构建查询中的条件部分,只使用那些用户填写的输入框。我的查询是这样的。如果其中一个输入框是空的,查询就不会返回任何结果,而我的本意是:如果输入框是空的,就在查询数据库时忽略它。
cursor.execute('''
SELECT name, id, gender, age, address, phones, mails, gender, age, hair_color
FROM persons
WHERE
name = ? AND
id = ? AND
gender = ? AND
age = ?
''', (name_input, id_input, gender_input, age_input))
1 个回答
4
你可以动态地创建WHERE条件:
sql = "SELECT ... WHERE 1"
parameters = []
if name_input != "":
sql += " AND name = ?"
parameters += [name_input]
if id_input != "":
sql += " AND id = ?"
parameters += [id_input]
...
或者,你可以重写WHERE条件,让空值被忽略:
SELECT ... WHERE (name = ?1 OR ?1 = '') AND (id = ?2 OR ?2 = '') AND ...
(?n
表示第n个参数.)