2013-10-15 57 views
-2

**我的代碼**錯誤更新表的Python

cur.execute('Update stud SET(fname,mname,lname,course,yns,radio,sy)VALUES("%s","%s","%s","%s","%s","%s","%s") where Studnum=="%s"'%(fname,mname,lname,course,yns,status,sy,studnum)) 
    con.commit() 

的錯誤

cur.execute('Update stud SET(fname,mname,lname,course,yns,radio,sy)VALUES("%s","%s","%s","%s","%s","%s","%s") where Studnum=="%s"'%(fname,mname,lname,course,yns,status,sy,studnum)) 

sqlite3.OperationalError:近 「(」:語法錯誤

+1

你不使用SET關鍵字當你這樣做時只使用'SET field =「value」類型更新 –

+0

Studnum ==「%s」'..誰告訴你關於SQL中的==運算符? –

+0

@ user2799617:實際上,[sqlite3沒有與'=='](http://www.sqlite.org/lang_expr.html)的問題:「等於可以是'='或'=='。」 – abarnert

回答

0

這是一個基本的SQL語法問題。您應該如何編寫您的查詢:

q = ''' 
    UPDATE stud SET 
     fname = ?, 
     mname = ?, 
     lname = ?, 
     course = ?, 
     yns = ?, 
     radio = ?, 
     sy = ? 
    WHERE 
     Studnum = ?''' 

cur.execute(q, (fname,mname,lname,course,yns,status,sy,studnum)) 

我將%s替換爲?,這是您應該如何將參數傳遞給Python中的查詢。

這些被稱爲參數化查詢並且這樣做有助於防止SQL注入,因爲您不是直接在SQL查詢中注入值。不僅如此,它還將確保數據庫類型的值正確轉義。

在Python中,有一種處理稱爲數據庫api(DB API)的所有數據庫的標準方式。 wiki.python.org上的wiki entry更詳細,manual page for sqlite in Python也有一些例子。

+0

我試試你的代碼先生,但這是錯誤 cur.execute(q,(fname,mname,lname,course,yns,status,sy,studnum)) sqlite3.OperationalError:接近「%」:語法錯誤 –

+0

是,因爲我忘了編輯它。 –

+0

我不知道hwy這是downvoted ...但無論如何,你在同一時間解決兩個問題,但只解釋一個。你需要解釋他得到'UPDATE'語法錯誤,並且_also_使用參數化語句解釋爲兩個單獨的問題。 – abarnert

-2

這項工作?

cur.execute("Update stud SET(fname,mname,lname,course,yns,radio,sy)VALUES('{}}','{}','{}','{}','{}','{}','{}') where Studnum=='{}'".format(fname,mname,lname,course,yns,status,sy,studnum)) 

我不知道你使用MSSQL的哪個db不喜歡雙引號。

+0

他正在使用SQlite,而不是MSSQL。 –

+0

無論如何,MSSQL與SQLite完全無效的'UPDATE'語法一樣有問題。 – abarnert