2017-08-29 60 views
1

在做我的項目時,我不得不將數據更新爲另一個數據。我試圖刪除現有的舊數據並插入新數據,但是這個過程改變了數據的順序,所以我不想要那種方法。如何在Python中更新sqlite3數據時解決錯誤?

我想要做的是找到一個值爲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

你可以嘗試更新後調用'conn.commit()'嗎? – bernie

+0

哦,我做了'conn.commit()',但錯過了寫在發佈時。雖然謝謝! –

+1

您正在'UPDATE'的'SET'部分使用'和',在那裏您應該使用','。 'UPDATE Test SET Menu1 =? ,Menu2 =? ,Menu3 =? ,Menu4 =? WHERE Menu1 =?和Menu2 =?和Menu3 =?和Menu4 =?' –

回答

0

聲明UPDATE Test SET Menu1 = ? and Menu2 = ? and Menu3 = ? and Menu4 = ? WHERE Menu1 = ? and Menu2 = ? and Menu3 = ? and Menu4 = ?是錯誤的。它被解析爲

  1. UPDATE, 「測試」,SET
  2. 「菜單1」,=?
  3. AND, 「菜單2」,=?
  4. AND ...
  5. 。 ...

中的將從2開始的整個語句轉換爲表達式。如果第一個參數爲「true-ish」且「Menu2」等於第二個參數,並且「Menu3」等於第三個參數等,則Menu1 = ? AND Menu2 = ? ...被強制爲一個布爾值,即True。這個表達式的結果是False,它被強制轉換成你看到的0

你可能要聲明是值得的

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

相關問題