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

问题描述 投票:0回答:1

我的 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!")
python sqlite sql-update
1个回答
0
投票

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

如果使用 COALESCE 代替 case 语句,它会更清晰。

大小=合并(?,大小)

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

© www.soinside.com 2019 - 2024. All rights reserved.