Python Mysql學習總結

任何應用都離不開數據,因此在學習python的時候,固然也要學習一個如何用python操做數據庫了。MySQLdb就是python對mysql數據庫操做的模塊。官方Introduction : MySQLdb is an thread-compatible interface to the popular MySQL database server that provides the Python database API. 它其實至關於翻譯了對應C的接口。python

   使用這種數據庫接口大可能是就是執行鏈接數據庫->執行query->提取數據->關閉鏈接 這幾個步驟。MySQLdb提供比較關鍵的對象,分別是Connection、Cursor、Result。具體使用步驟很簡單先不寫了,先寫一些我的認爲比較重要、值得注意的地方。mysql

 一、雖然在MySQLdb.Connect(host ,user , passw , db)函數中,咱們常用的只是這幾個參數,可是其實裏面還有不少好比字符集、線程安全、ssl等也都是很重要的參數,使用時要身份注意。sql

 二、當使用Connection.query()函數進行query後,connection 對象能夠返回兩種result,分別是store_result和use_result,store_result 將結果集存回client端,而use_result則是結果集保存在server端,而且維護了一個鏈接,會佔用server資源。此時,不能夠進行任何其餘的查詢。建議使用store_result,除非返回結果集(result set)過大或是沒法使用limit的情形。數據庫

 三、提取(fetch)數據的返回形式大多有三種情形。 as a tuple(how=0) ;as dictionaries, key=column or table.column if duplicated(how=1);as dictionaries, key=table.column (how=2)安全

 四、每次fetch,在result內部都會產生數據位置的移動,也就是說假若有10行數據,執行result.fetch_row(3,0),會獲得前三行,再執行result.fetch_row(3,0),則會獲得中間的三行,因此說fetch會致使position的移動。另外值得注意的是,若是使用use_result,也就是數據存儲在server時,在fetch全部的條目以前,不能進行任何的query操做。網絡

 五、mysql自己不支持遊標(Cursor),可是MySQLdb對Cursor進行了仿真。重要的執行query方法有execute 和 executemany 。execute方法,執行單條sql語句,調用executemany方法很好用,數據庫性能瓶頸很大一部分就在於網絡IO和磁盤IO將多個insert放在一塊兒,只執行一次IO,能夠有效的提高數據庫性能。遊標cursor具備fetchone、fetchmany、fetchall三個方法提取數據,每一個方法都會致使遊標遊動,因此必須關注遊標的位置。遊標的scroll(value, mode)方法可使得遊標進行卷動,mode參數指定相對當前位置(relative)仍是以絕對位置(absolute)進行移動。ide

 六、MySQLdb提供了不少函數方法,在官方指南里沒有徹底羅列,使用者能夠用help去看看,裏面提供了不少方便的東西。函數

 七、對於mysql來講,若是使用支持事務的存儲引擎,那麼每次操做後,commit是必須的,不然不會真正寫入數據庫,對應rollback能夠進行相應的回滾,可是commit後是沒法再rollback的。commit() 能夠在執行不少sql指令後再一次調用,這樣能夠適當提高性能。性能

 八、executemany處理過多的命令也不見得必定好,由於數據一塊兒傳入到server端,可能會形成server端的buffer溢出,而一次數據量過大,也有可能產生一些意想不到的麻煩。合理,分批次executemany是個不錯的辦法。學習

相關文章
相關標籤/搜索