2011-11-22 125 views
1

下面是我用我的SQLite數據庫更新信息的代碼:即使沒有語法錯誤,Sqlite語法錯誤。幫幫我?

self.c.execute("UPDATE proxydata (proxy, description) VALUES ('" + proxy + "', '" + description + "') WHERE proxy='" + proxy + "'") 

但我得到這個錯誤:

sqlite3.OperationalError: near "(": syntax error 

因爲我的生命,我找不到一個錯誤。執行時的兩個變量都是正確格式的字符串。

編輯:

這工作得很好:

self.c.execute("UPDATE proxydata SET description='" + description + "' WHERE proxy='" + proxy + "'") 

您可以關閉線程。

+0

通過它來執行和轉儲它的值之前構造SQL字符串。然後檢查真實的價值,看看你是否仍然認爲沒問題。如果是,告訴我們生成的SQL。 – Achim

回答

6

使用參數化的SQL:

sql='UPDATE proxydata SET description = ? WHERE proxy = ?' 
args=[decription,proxy] 
self.c.execute(sql,args) 

這顯然是更容易,因爲你不必自己引用的論點,因此不易出錯。 它也更安全,因爲參數化sql允許sqlite3防止sql注入。


注意如果proxydescription本身包含一個單引號,那麼就需要進行轉義。您的SQL語句的手動構造不能正確地轉義該引號。這可能是你看到的語法錯誤的原因。


編輯:正如其他人指出,語法錯誤的真正原因很簡單,就是UPDATE ... VALUES ... WHERE無效(源碼)SQL。 proper UPDATE syntaxUPDATE ... SET ... WHERE

+0

感謝您的提示。 –

3

沒有語法錯誤沒有這樣的語法錯誤。試試這個:

self.c.execute("UPDATE proxydata SET proxy='" + proxy + "', description='" + description + "' WHERE proxy='" + proxy + "'") 

此語法描述如下:http://www.sqlite.org/lang_update.html

+0

謝謝。這工作正常。 –