1
我知道SO不是「調試我的代碼服務」,但經過幾個小時的檢查和重試後,我錯過了一些非常愚蠢的東西,或者有一個錯誤(或編譯錯誤)在我MySQLdb的模塊...Python,MySQLdb,無法更新行
而且我有一些相關的問題我已經張貼的代碼放在一起......
def NextDocumentIdToCache():
if not OpenConnection():
return 0
# ...setting string values... #
cur = connection.cursor(mysql.cursors.DictCursor)
cur.execute('SELECT * FROM documents WHERE resolutions <> %s AND pdf > 0 AND status = %s AND expire > %s AND locked = %s LIMIT 0,1', (resolutions, status, expireLimit, ''))
rowsCount = cur.rowcount
if rowsCount==0:
return 0
row = cur.fetchone()
id = row['document_id']
一切好,因爲現在。連接打開,我得到一行並檢索在函數結尾處返回的正確的id。
然後我需要在該行中讀取執行更新操作...
cur.close()
cur = connection.cursor(mysql.cursors.Cursor)
我已經關閉了光標,打開一個新的。 我真的需要這樣做嗎?或者我可以重複使用相同的光標嗎?
cur.execute("""UPDATE documents SET locked = %s WHERE document_id = %s""", ("worker: rendering pages", id))
這實際上不會更新該行。沒有例外發生,只是不工作。
最後函數結束...
cur.close()
return id
另外幾個問題。
什麼
cur.execute("""UPDATE documents....
和
cur.execute("UPDATE documents....
我兩個版本各地看到的區別。三聯雙聯報價,單雙聯雙聯報價,單聯單報價三聯功能區別是什麼?
最後
如果我寫的查詢
cur.execute("""UPDATE documents SET locked = %s WHERE document_id = %d""", ("worker: rendering pages", id))
(注意%d,而不是%s的)我得到一個錯誤。但ID是一個長整數,我檢查過。那麼,怎麼了?
謝謝
不明確(我沒有寫代碼來啓動一個事務,只是打開了連接並執行了兩個查詢)。但是在最後添加** connection.commit()**解決了這個問題。謝謝。 – Paolo