Python 的 MySQLdb 模塊插入數據沒有成功與 autocommit(自動提交)的關係

歡迎你們訪問我本身架的博客站點 碼廄技術博客 (Now碼廄 http://www.markjour.com/html


用 MySQLdb 操做數據庫,插入數據以後發現數據庫中依然爲空,不知緣由爲什麼。

開啓 mysqld 的 log 設置項以後發現日誌文檔中更有執行 sql 語句,直接複製語句在客戶端中執行也沒有問題,那麼爲何經過 MySQLdb 的插入所有沒有結果呢?

我懷疑是 MySQLdb 的問題,在日誌文件中仔細的看了一遍運行的全部sql 語句,在創建鏈接以後還運行了這句:set autocommit=0。這句話的嫌疑很大,由於這個涉及到一個語句提交執行的問題,並且對於 commit 我有點印象,好像之前學習 MySQLdb 的時候,特地注意到了這點。無論怎樣,這就找準了關鍵字:MySQLdb autocommit

根據網上搜到的結果,能夠大概瞭解到,MySQLdb 在鏈接後關閉了自動提交,自動提交對於 innodb 引擎很重要,沒有這個設置,innodb 引擎就不會真正執行語句。

解決的辦法:
一、語句末尾加上「COMMIT;」
二、運行完語句,至少在關閉數據庫以前提交一下,如:conn.commit()
三、數據庫鏈接創建以後,設置自動提交,如:conn.autocommit(1)

只是不知道爲何 innodb 會這樣,多是由於這是一個事務型數據庫引擎,沒有提交就不會在服務器上執行,只會緩存在客戶端上的緣故吧!

MySQL技術內幕:InnoDB存儲引擎
這本書好像出到第二版了,這些關於數據庫方面的知識,仍是要了解一下的。

參考
一、MySQLdb 插入數據失敗?
http://luchanghong.com/database/2012/06/20/mysqldb-insert-data-failed.html
二、MySQLdb Python模塊autocommit屬性測試及測試過程當中關於數據庫鏈接的理解
http://blog.csdn.net/gukesdo/article/details/7026371mysql

相關文章
相關標籤/搜索