在完成我的项目时,我不得不将数据更新为另一个数据。我试图删除现有的旧数据并插入新数据,但是这个程序改变了数据的顺序,所以我不想要那种方法。
我要做的是找到值为old
的数据,并将其替换为new
中的值。所以这就是我所做的代码:
import sqlite3
old = ('Test1', 'Test2', 'Test3', 'Test4')
new = ('Test_1', 'Test_2', 'Test_3', 'Test_4')
conn = sqlite3.connect('TestDB')
c = conn.cursor()
c.execute("CREATE TABLE IF NOT EXISTS Test (Menu1 text, Menu2 text, Menu3 text, Menu4 text)")
conn.commit()
c.execute("INSERT INTO Test VALUES (?, ?, ?, ?)", old)
conn.commit()
c.execute("UPDATE Test SET Menu1 = ? and Menu2 = ? and Menu3 = ? and Menu4 = ? WHERE Menu1 = ? and Menu2 = ? and Menu3 = ? and Menu4 = ?", new + old)
conn.commit()
c.execute("SELECT * FROM Test")
print(c.fetchall())
但是我在更新数据集时遇到了问题:代码的结果是:
[('0', 'Test2', 'Test3', 'Test4')]
那么为什么我有这个问题呢?我该如何解决这个问题呢?我一直试图解决这个问题好几天,但仍然无法解决问题。
答案 0 :(得分:0)
声明UPDATE Test SET Menu1 = ? and Menu2 = ? and Menu3 = ? and Menu4 = ? WHERE Menu1 = ? and Menu2 = ? and Menu3 = ? and Menu4 = ?
是错误的。它被解析为
UPDATE
,"测试",SET
=
,?
AND
," Menu2",=
,?
AND
... 3.中的AND
将整个语句从2.开始转换为表达式。 Menu1 = ? AND Menu2 = ? ...
被强制转换为布尔值True
,如果第一个参数是" true-ish"和" Menu2"等于第二个参数," Menu3"等于第三个参数,依此类推。此表达式的结果为False
,它被强制转换为您看到的0
。
您可能想要的陈述符合
的要求 UPDATE Test SET Menu1 = ?, Menu2 = ?, .... WHERE Menu1 = ? ...
。