Python 3 與 MySQL 5.6


主要簡單說下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過程和訪問其他的數據沒有太大的不同。都經歷以下幾個步驟:

  1. 建立連接。
  2. 建立游標cursor。
  3. 調用cursor的execute方法,以SQL語句和變量為參數,執行數據庫操作。
  4. 返回結果。
  5. 關閉游標,關閉連接。

 

在操作之前,看下MySQL數據庫里面的數據結構

截圖00

讀數據

從數據庫讀數據的基本操作。基本就是遵循上面的步驟。

eg1


最后調用相應的方法關閉連接。里面關於Exception的處理方法和一般數據庫連接相似,但是python里面每個數據庫都定義了自己的DatabaseError。對於MySQL的DatabaseError是定義在mysql.connector模塊中的。可以通過mysql.connector來查看和使用。

eg2

 

寫數據

如何更新數據庫數據或者插入新數據。寫入完成后,最好調用下連接器的commit()提交下數據(雖然它也會自動commit)

eg3


更新后的數據庫數據

截圖01

 

參數化

在實際使用過程中,SQL語句的使用往往會帶有參數,不是固定的,會接受用戶的參數來返回用戶想要的結果。同時這樣做也可以防范一些SQL注入的危險。

在python的數據庫模塊中,每種數據庫對應的參數處理形式往往是不同的。要根據具體的數據庫的paramstyle選用相應的參數傳入形式。有以下幾種形式:

  1. qmark 問號類型。 eg. cur.execute(“… where name = ? and account = ?”,  (symbol, account))
  2. numberic 數字類型。eg. cur.execute(“… where name = :0 and account = :1”,  (symbol, account))
  3. named 命名類型。ORACLE數據庫采用的形式。eg. cur.execute(“… where name = : symbol and account = :account”,  {‘symbol’:value1, ‘account’: value2})
  4. format 格式代碼。eg. cur.execute(“… where name = %s and account = %d”,  (symbol, account))
  5. 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的各種方法調用。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM