我有一个表单有4个输入字段,当点击提交按钮时,我根据这4个输入从数据库中提取结果。我并没有强迫用户输入任何输入,所以我可以获得所有空白输入或部分空白。用户填充的输入越多,数据库的结果就越精确。
我的问题是如何仅使用填充的占位符动态构建查询的where部分。这是我的查询。这样,如果其中一个输入为空,则查询将不会获取任何内容,而我的意图则相反:如果输入为空,则在查询数据库时不要考虑。
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))
答案 0 :(得分:3)
您可以动态创建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 ...