【问题标题】:Python sqlite3 build where part with dynamic placeholdersPython sqlite3 构建带有动态占位符的部分
【发布时间】: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))

【问题讨论】:

    标签: python sqlite placeholder


    【解决方案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.)

    【讨论】:

      猜你喜欢
      • 2012-08-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-10-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-03-27
      相关资源
      最近更新 更多