Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/288.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python sqlite3 build where part带有动态占位符_Python_Sqlite_Placeholder - Fatal编程技术网

Python sqlite3 build where part带有动态占位符

Python sqlite3 build where part带有动态占位符,python,sqlite,placeholder,Python,Sqlite,Placeholder,我有一个包含4个输入字段的表单,当单击submit按钮时,我将根据这4个输入从数据库中获取结果。我没有强迫用户输入任何输入,因此我可以得到所有空白输入或其中的一部分为空。用户填写的输入越多,数据库的结果就越精确 我的问题是如何仅使用填充的占位符动态构建查询的where部分。这是我的问题。这样,如果其中一个输入为空,查询将不会获取任何内容,而我的意图正好相反:如果输入为空,则在查询数据库时不考虑任何内容 cursor.execute(''' SELECT name, id, gen

我有一个包含4个输入字段的表单,当单击submit按钮时,我将根据这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))

您可以动态创建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子句,以便忽略空值:

选择。。。其中(名称=?1或?1=“”)和(id=?2或?2=“”)以及。。。
()