2013-09-28 77 views
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是一個長整數,我檢查過。那麼,怎麼了?

謝謝

回答

2

的改變不會生效:

你在做交易?如果是這樣,你需要提交。

引用

三引號字符串是多行,單引號字符串不是。

插值

因爲這實際上並不是字符串插值。這些佔位符由MySQLdb解釋,它將爲您處理引用。

+0

不明確(我沒有寫代碼來啓動一個事務,只是打開了連接並執行了兩個查詢)。但是在最後添加** connection.commit()**解決了這個問題。謝謝。 – Paolo