2016-12-07 173 views
0

首先,我知道這裏已經有帖子和類似的標題,我已經查看了這些問題的答案,但仍然無法找出這些答案的解決方案。 (我的問題與其他問題稍有不同)。sqlite3.OperationalError:無法識別的令牌:「{」

我需要能夠更新我的sqlite數據庫中的特定記錄的字段的值。我曾經用來幫助解決這個問題的其中一個帖子是this

我已經使用了相同的格式在我的代碼在這裏:

updateCustomerTable = c.execute("UPDATE customerTable SET {} = ? WHERE customerID = ?").format(age), (newAge.get(),) , (customerID.get(),) 

,但我得到一個錯誤信息:當開發人員使用它

sqlite3.OperationalError: unrecognized token: "{" 

爲什麼花括號不允許在其他職位的答案?

回答

2

這裏(代碼重新格式化爲可讀性):

c.execute(
    "UPDATE customerTable SET {} = ? WHERE customerID = ?" 
    ).format(age) 

所以實際上你對c.execute()結果調用.format(),而不是在你的SQL查詢字符串。如果查詢是有效的SQL FWIW,它實際上會產生一個AttributeError

你想要的是:

sql = "UPDATE customerTable SET {} = ? WHERE customerID = ?".format(age) 
c.execute(sql, ...) 
+0

我已經把在參數檢索結果到執行行,所以c.execute(SQL,(newAge.get()),(的customerID。 get(),))但是這意味着有3個參數,其中2是給定的?我應該把其他東西放進那條線嗎? – JoeW373

+0

這個問題解決了嗎?如上所述,'.format()'方法必須在字符串語句中進行操作,查詢參數作爲列表或元組傳遞給一個附加參數。 – Parfait