Python sqlite3 构建带有动态占位符的部分
Posted
技术标签:
【中文标题】Python sqlite3 构建带有动态占位符的部分【英文标题】:Python sqlite3 build where part with dynamic placeholders 【发布时间】:2014-10-17 15:55:11 【问题描述】:我有一个包含 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))
【问题讨论】:
【参考方案1】:您可以动态创建 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
specifies the n-th parameter.)
【讨论】:
以上是关于Python sqlite3 构建带有动态占位符的部分的主要内容,如果未能解决你的问题,请参考以下文章
iOS 13 - 带有占位符的 UITextField 让应用程序崩溃