如何在Python中更新sqlite3数据时解决错误?

时间:2017-08-29 23:57:47

标签: python sqlite

在完成我的项目时,我不得不将数据更新为另一个数据。我试图删除现有的旧数据并插入新数据,但是这个程序改变了数据的顺序,所以我不想要那种方法。

我要做的是找到值为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')]

那么为什么我有这个问题呢?我该如何解决这个问题呢?我一直试图解决这个问题好几天,但仍然无法解决问题。

1 个答案:

答案 0 :(得分:0)

声明UPDATE Test SET Menu1 = ? and Menu2 = ? and Menu3 = ? and Menu4 = ? WHERE Menu1 = ? and Menu2 = ? and Menu3 = ? and Menu4 = ?是错误的。它被解析为

  1. UPDATE,"测试",SET
  2. " Menu1",=?
  3. AND," Menu2",=?
  4. AND ...
  5. ....
  6. 3.中的AND将整个语句从2.开始转换为表达式。 Menu1 = ? AND Menu2 = ? ...被强制转换为布尔值True,如果第一个参数是" true-ish"和" Menu2"等于第二个参数," Menu3"等于第三个参数,依此类推。此表达式的结果为False,它被强制转换为您看到的0

    您可能想要的陈述符合

    的要求

    UPDATE Test SET Menu1 = ?, Menu2 = ?, .... WHERE Menu1 = ? ...