我的 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!")
为了在这里得到答案,请确保您传递 None 而不是空字符串。
如果使用 COALESCE 代替 case 语句,它会更清晰。
大小=合并(?,大小)
通过这种方式,您可以将查询的参数减少一半,因为您仅指定一列一次。