代码之家  ›  专栏  ›  技术社区  ›  RoundoDuck

python-sqlite查询,仅在使用的变量不为NULL时更新值

  •  0
  • RoundoDuck  · 技术社区  · 2 年前

    我的sqlite查询使用传入的空变量更新列,而不是忽略空变量并在列中保留当前值。

    我的程序要求用户在每个变量中输入信息,如果不需要更改该列,则保留为空。需要忽略留空的变量,并且需要保留列中的当前值。这是我让用户一次更新多个列的方法,而不是一次只更新一个,然后必须重新开始。

    我使用的是python 3和sqlite3。

    这是我尝试运行的代码块。

                    c.execute('''UPDATE filaments SET brand= CASE WHEN ? IS NOT NULL THEN ? ELSE brand END, 
                                material= CASE WHEN ? IS NOT NULL THEN ? ELSE material END, 
                                color= CASE WHEN ? IS NOT NULL THEN ? ELSE color END, 
                                spools= CASE WHEN ? IS NOT NULL THEN ? ELSE spools END,
                                size= CASE WHEN ? IS NOT NULL THEN ? ELSE size END,
                                weight= CASE WHEN ? IS NOT NULL THEN ? ELSE weight END,
                                price= CASE WHEN ? IS NOT NULL THEN ? ELSE price END 
                                WHERE id = ?''', (b,b,m,m,co,co,sc,sc,ss,ss,sw,sw,p,p,slct))
                    conn.commit()
                    print("Process complete!")
    
    1 回复  |  直到 2 年前
        1
  •  0
  •   sadbuttrue    2 年前

    为了在这里得到答案,请确保传递的是None而不是空字符串。

    此外,如果你使用COALESCE来代替case语句,它会更干净。

    size=COALESCE(?,size)

    通过这种方式,您可以将查询的参数减少一半,因为您只指定一列一次。