MySQLdb簡單查詢
使用過Java的同行都知道,任何系統都離不開數據庫,而我們常常又不得不使用mysql,自然少不了jdbc的參與。同樣的道理使用Python的時候,同樣的有一個驅動程序叫MySQLdb,不得不抱緊它。或許,你可以不使用任何存在的驅動程序,直接去用命令連接 mysql。但使用命令并非長久之計,而且需要部署項目的服務端必須安裝mysql。這篇文章的目的就是用mysqldb實現簡單的操作。
什么是MySQLdb
簡單的說就是Python 連接 MySQL 的一個模塊或者驅動程序,使用起來也很方便。如果你使用過其他語言,例如Java那么jdbc肯定再熟悉不過來了,mysqldb在Python中正是充當了一個類似于jdbc的角色。
怎么使用
數據庫操作無非就是CRUD操作(Create,Retrieve,Update,Delete),即增刪改查操作。更加大范圍的講也就是寫和讀兩個操作。讀數據一般比較簡單,輸入正常的sql語句即可。但寫數據卻不得不考慮事務。無論是讀還是寫,前提都是連連上數據庫才可以操作,那么下面我們就從最基本的思路開始。
連接數據庫
import MySQLdb connection = mdb.connect("127.0.0.1",3306, "root", "root","dbname")
這樣便意味著連上了數據庫。
執行sql 查詢語句
import MySQLdb as mdb connection = mdb.connect("127.0.0.1",3306, "root", "root","test") cursor = connection.cursor() cursor.execute("select * from table") result = cursor.fetchall() cursor.close() connection.close()
此處注意cursor.close()這個方法的執行,如果在執行玩sql語句不執行這條語句進行關閉游標,也許你將會遇到下面的錯誤信息:
Commands out of sync; you can't run this command now
上面的查詢查到的信息知識簡單的輸出結果,如果想要輸出帶有列的json格式數據還需要進一步處理,其實也談不上處理,因為MySQLdb已經幫助我們想到了這點,僅僅需要在connection.cursor()中添加個參數mdb.cursors.DictCursor,如下:
import MySQLdb as mdb connection = mdb.connect("127.0.0.1",3306, "root", "root","test") cursor = connection.cursor(mdb.cursors.DictCursor) cursor.execute("select * from table") result = cursor.fetchall() cursor.close() connection.close()
執行寫入語句
執行寫入語句,便是insert,update,delete操作語句。至于為什么要把寫入單獨列出來,就是因為事務這個東西。如果你用上面的案例去執行寫入語句,你將會發現,雖然執行顯示成功了,但是數據庫則沒有發生任何變化,不妨試試下面的例子:
import MySQLdb as mdb connection = mdb.connect("127.0.0.1",3306, "root", "root","test") cursor = connection.cursor(mdb.cursors.DictCursor) cursor.execute("update table set field='xxx'") cursor.commit() cursor.close() connection.close()
到目前為止應該是沒問題的,如果還是無法改變數據庫的變化,那你只能去看看這篇文章了
其他操作
-
查看所有數據庫
import MySQLdb as mdb connection = mdb.connect("127.0.0.1",3306, "root", "root") cursor = connection.cursor(mdb.cursors.DictCursor) cursor.execute("show databases") result = cursor.fetchall() cursor.close() connection.close()
-
查看庫中的表格
注:不要使用use dbname;這樣的語句,直接在connect()方法中傳數據庫名便可以了
import MySQLdb as mdb connection = mdb.connect("127.0.0.1",3306, "root", "root","test) cursor = connection.cursor(mdb.cursors.DictCursor) cursor.execute("show tables") result = cursor.fetchall() cursor.close() connection.close()
來自:http://my.oschina.net/crazyharry/blog/339700