2014-02-23 67 views
2

我正在使用pyqt的一個簡單的gui,並試圖更新我的數據庫沒有任何運氣到目前爲止。我對qt,數據庫以及python都很陌生)所以我不明白我的代碼有什麼問題,也許有人可以幫我一點點。使用QSqlQuery更新sqlite3數據庫

雖然使用Python(3)和sqltie3我可以更新我的數據庫是這樣的:

cur.execute('''UPDATE news SET Raw=? WHERE id=?''', (raw, news_id)) 

但隨着PyQt的它是唯一的工作是這樣的:

query = QSqlQuery() 
query.exec_("UPDATE news SET Raw = 'test' WHERE Id = 9") 

我想:

query.exec_("UPDATE news SET Raw = ? WHERE Id = ?", (raw, news_id)) 

導致此錯誤的原因:

TypeError: arguments did not match any overloaded call: 
QSqlQuery.exec_(str): too many arguments 
QSqlQuery.exec_(): too many arguments 

在使用Qt他正在做他的查詢,像這樣的書快速GUI編程(不完全是這樣的,但我努力去適應它):

query.exec_('''UPDATE news SET Raw={0} WHERE id={1}'''.format(raw, news_id)) 

它似乎並沒有做任何事情。

和(似乎沒有任何做任何事情):

raw = 'test' 
query.prepare("UPDATE news SET (Raw) VALUES (:raw) WHERE Id = 9 ") 
query.bindValue(":raw", raw) 
#query.bindValue(":news_id", 9) 
query.exec_() 

井和其他一些東西我已經在這裏和其他地方,但沒有任何運氣迄今發現的。

回答

1

看來你還沒有嘗試過正確的語法,這應該是以下幾點:

query.prepare(QString("UPDATE news SET Raw = :value WHERE id = :id ")); 
query.bindValue(":value", raw); 
query.bindValue(":id", news_id); 
+0

嗨,幫助了我很多,謝謝! – user3199535

+0

我很好奇,我在哪裏可以找到這種語法?我正在查看官方文檔,他們這樣做,就像我在我的最後一個示例中那樣: http://pyqt.sourceforge.net/Docs/PyQt4/qsqlquery.html – user3199535

+0

該文檔顯示INSERT語法,而不是UPDATE 。 – lpapp

相關問題