2017-07-02 55 views
1

我正在使用python更新Sqlite表中的條目。 我使用的命令是:使用Python更新表時Sqlite中的錯誤

handle.execute("UPDATE RECORD set NAME=%s DEVICE=%s PROJECT=%s IP=%s COMMENT=%s where ID = %s"%(arg[2],arg[3],arg[4],arg[5],arg[6],arg[1])) 

對此我得到我得到一個錯誤:

sqlite3.OperationalError: near "DEVICE": syntax error 

我不明白什麼是專門錯Device。我也檢查過變量是否如預期的那樣。數據庫有一個名爲device的列,可以使用這個python文件打開/訪問和編輯數據庫。

回答

1

設置項目之間缺少逗號。

除此之外,而不是字符串格式化,pass parameters防止SQL注入:

handle.execute(
    """UPDATE RECORD 
    SET NAME=%s, DEVICE=%s, PROJECT=%s, IP=%s, COMMENT=%s 
    WHERE ID = %s""", 
    (arg[2], arg[3], arg[4], arg[5], arg[6], arg[1])) 

UPDATE 如果你堅持使用字符串格式化,你應該引用%s'%s'

+0

添加逗號列之間工作。現在它給我一個錯誤,因爲「sqlite3.OperationalError:沒有這樣的列:john」。 這裏John是我想要在列中更新的變量: - 'name'。相反,爲什麼它搜索名爲john的列? – john

+0

@john,您需要引用值'%s' - >''%s''。順便說一句,正如我在答案中所提到的,你最好使用參數傳遞而不是字符串格式化。 – falsetru

+1

SET NAME ='%s',DEVICE ='%s',PROJECT ='%s',IP ='%s',COMMENT ='%s'WHERE ID ='%s'' – falsetru