主要簡單說下Python 3.3搭配MySQL Community Server 5.6的使用。在Python 3系列和MySQL 5.0系列里面下面的代碼應該都通用。(沒有驗證)
准備
python 3 這個在python的官方網站就能download. http://www.python.org/
MySQL Community Server 5.6 在MySQL的官網也能找到: http://dev.mysql.com/downloads/mysql/5.6.html
MySQL官方已經提供了支持Python 3.0的connector,地址: http://dev.mysql.com/downloads/connector/ (這里包含了MySQL對C, C++, Python, Java, .NET等語言的連接器)
簡述
Python3訪問MySQL 5.6過程和訪問其他的數據沒有太大的不同。都經歷以下幾個步驟:
- 建立連接。
- 建立游標cursor。
- 調用cursor的execute方法,以SQL語句和變量為參數,執行數據庫操作。
- 返回結果。
- 關閉游標,關閉連接。
在操作之前,看下MySQL數據庫里面的數據結構
讀數據
從數據庫讀數據的基本操作。基本就是遵循上面的步驟。
eg1
最后調用相應的方法關閉連接。里面關於Exception的處理方法和一般數據庫連接相似,但是python里面每個數據庫都定義了自己的DatabaseError。對於MySQL的DatabaseError是定義在mysql.connector模塊中的。可以通過mysql.connector來查看和使用。
eg2
寫數據
如何更新數據庫數據或者插入新數據。寫入完成后,最好調用下連接器的commit()提交下數據(雖然它也會自動commit)
eg3
更新后的數據庫數據
參數化
在實際使用過程中,SQL語句的使用往往會帶有參數,不是固定的,會接受用戶的參數來返回用戶想要的結果。同時這樣做也可以防范一些SQL注入的危險。
在python的數據庫模塊中,每種數據庫對應的參數處理形式往往是不同的。要根據具體的數據庫的paramstyle選用相應的參數傳入形式。有以下幾種形式:
- qmark 問號類型。 eg. cur.execute(“… where name = ? and account = ?”, (symbol, account))
- numberic 數字類型。eg. cur.execute(“… where name = :0 and account = :1”, (symbol, account))
- named 命名類型。ORACLE數據庫采用的形式。eg. cur.execute(“… where name = : symbol and account = :account”, {‘symbol’:value1, ‘account’: value2})
- format 格式代碼。eg. cur.execute(“… where name = %s and account = %d”, (symbol, account))
- pyformat 擴展格式代碼。MySQL采用的就是這種形式。eg. cur.execute(“… where name = %(name)s and account = %(account)d”, {‘symbol’:value1, ‘account’: value2})
paramstyle查看:
eg5
示例
eg4
額外注意
- paramstyle在不同的數據庫上的不同。
- cursor.execute方法在不同的數據庫上適用略有不同。比如在ORACLE數據庫上,還要先調用其cursor.prepare()方法,傳入SQL語句。
- 對於數據庫操作過程中的各種exception的處理,包括更新和寫操作成功性的判斷,進行commit或者rollback操作。
- 對於數據庫讀取的返回的數據的處理,可以使用namedtuple.但是還有更好的方法,在后面的文章進行專門講述。
- 關於cursor的其他的方法的使用。python操作數據庫最關鍵的還是cursor的各種方法調用。


