[Python] 學習筆記之MySQL數據庫操作


1 Python標准數據庫接口DB-API介紹

  Python標准數據庫接口為 Python DB-API,它為開發人員提供了數據庫應用編程接口。Python DB-API支持很多種的數據庫,你可以選擇跟自己項目相關的數據庫。Python DB-API支持的數據庫如下所示:

  • GadFly
  • mSQL
  • MySQL
  • PostgreSQL
  • Microsoft SQL Server 2000
  • Informix
  • Interbase
  • Oracle
  • Sybase

  不同的數據庫你需要下載不同的DB API模塊,例如你需要訪問Oracle數據庫和Mysql數據,你需要下載Oracle和MySQL數據庫模塊。Python的DB-API,為大多數的數據庫實現了接口,使用它連接各數據庫后,就可以用相同的方式操作各數據庫。

  Python DB-API使用流程:

  1)引入 API 模塊。

  2)獲取與數據庫的連接。

  3)執行SQL語句和存儲過程。

  4)關閉數據庫連接。

  Python的數據庫學習,主要在於學習DB-API的學習流程,記住這四步,你就已經成功了一大半了。

2 MySQL的安裝

  因為博主目前只關注MySQL的使用,所以本文中只限於介紹如何利用Python來操作MySQL數據庫。下面簡單介紹一下如何為自己的Python IDE安裝MySQL:

  Step1 確認是否已經安裝有MySQL,執行以下代碼:

# encoding: utf-8
#!/usr/bin/python

import MySQLdb

  如果執行后報錯就說明沒有安裝MySQL,否則則證明你已經無需安裝MySQL。

  Step2 下載MySQL並安裝:

  下載地址一:請點這里

  下載地址二:請點這里

  具體的安裝步驟和Python的其他庫安裝方式類似,不在贅述。你可以用Step1的方法來確認你是否已經成功安裝MySQL。

3 數據庫連接

  連接數據庫前,請先確認以下事項:連接數據庫TESTDB使用的用戶名為 "testuser" ,密碼為 "test123",你可以可以自己設定或者直接使用root用戶名及其密碼。

  以下實例鏈接Mysql的TESTDB數據庫,對應了DB-API的四個步驟:

# encoding: utf-8
#!/usr/bin/python

# 1 引入API模塊 import MySQLdb
# 2 獲取與數據庫的連接

# 打開數據庫連接
db = MySQLdb.connect("localhost","testuser","test123","TESTDB" )
# 3 執行SQL語句和存儲過程
# 使用cursor()方法獲取操作游標 cursor = db.cursor() # 使用execute方法執行SQL語句 cursor.execute("SELECT VERSION()") # 使用 fetchone() 方法獲取一條數據庫。 data = cursor.fetchone() print "Database version : %s " % data

# 4 關閉數據庫連接
# 關閉數據庫連接 db.close()

  執行結果顯示:

Database version : 5.0.45

4 創建數據庫表

  我們嘗試建立一個自定義的數據庫表:

  數據庫表名稱:EMPLOYEEEMPLOYEE

  數據表字段為:FIRST_NAME,LAST_NAME,AGE,SEX 和 INCOME。

# encoding: utf-8
#!/usr/bin/python

import MySQLdb

# 打開數據庫連接
db = MySQLdb.connect("localhost","testuser","test123","TESTDB" )

# 使用cursor()方法獲取操作游標 
cursor = db.cursor()

# 如果數據表已經存在使用 execute() 方法刪除表。
cursor.execute("DROP TABLE IF EXISTS EMPLOYEE")

# 創建數據表SQL語句
sql = """CREATE TABLE EMPLOYEE (
         FIRST_NAME  CHAR(20) NOT NULL,
         LAST_NAME  CHAR(20),
         AGE INT,  
         SEX CHAR(1),
         INCOME FLOAT )"""

cursor.execute(sql)

# 關閉數據庫連接
db.close()

5 插入數據操作

  使用SQL INSERT 語句向數據庫表 EMPLOYEE 插入記錄:

# encoding: utf-8
#!/usr/bin/python

import MySQLdb

# 打開數據庫連接
db = MySQLdb.connect("localhost","testuser","test123","TESTDB" )

# 使用cursor()方法獲取操作游標 
cursor = db.cursor()

# SQL 插入語句
sql = """INSERT INTO EMPLOYEE(FIRST_NAME,
         LAST_NAME, AGE, SEX, INCOME)
         VALUES ('Mac', 'Mohan', 20, 'M', 2000)"""
try:
   # 執行sql語句
   cursor.execute(sql)
   # 提交到數據庫執行
   db.commit()
except:
   # Rollback in case there is any error
   db.rollback()

# 關閉數據庫連接
db.close()

  在這里提幾個重要的點:

  1)注意一定要有conn.commit()這句來提交事務,要不然不能真正的插入數據。

  2)dollback()是回滾操作,回滾(Rollback)指的是程序或數據處理錯誤,將程序或數據恢復到上一次正確狀態的行為。回滾包括程序回滾和數據回滾等類型。

6 數據庫查詢操作

  Python查詢Mysql使用 fetchone() 方法獲取單條數據, 使用fetchall() 方法獲取多條數據。

  • fetchone():該方法獲取下一個查詢結果集。結果集是一個對象
  • fetchall():接收全部的返回結果行.
  • rowcount:這是一個只讀屬性,並返回執行execute()方法后影響的行數。

  查詢EMPLOYEE表中salary(工資)字段大於1000的所有數據:

# encoding: utf-8
#!/usr/bin/python

import MySQLdb

# 打開數據庫連接
db = MySQLdb.connect("localhost","testuser","test123","TESTDB" )

# 使用cursor()方法獲取操作游標 
cursor = db.cursor()

# SQL 查詢語句
sql = "SELECT * FROM EMPLOYEE \
       WHERE INCOME > '%d'" % (1000)
try:
   # 執行SQL語句
   cursor.execute(sql)
   # 獲取所有記錄列表
   results = cursor.fetchall()
   for row in results:
      fname = row[0]
      lname = row[1]
      age = row[2]
      sex = row[3]
      income = row[4]
      # 打印結果
      print "fname=%s,lname=%s,age=%d,sex=%s,income=%d" % \
             (fname, lname, age, sex, income )
except:
   print "Error: unable to fecth data"

# 關閉數據庫連接
db.close()

  執行結果顯示:

fname=Mac, lname=Mohan, age=20, sex=M, income=2000

7 數據庫更新操作

  更新操作用於更新數據表的的數據,以下實例將 TESTDB表中的 SEX 字段全部修改為 'M',AGE 字段遞增1:

# encoding: utf-8
#!/usr/bin/python

import MySQLdb

# 打開數據庫連接
db = MySQLdb.connect("localhost","testuser","test123","TESTDB" )

# 使用cursor()方法獲取操作游標 
cursor = db.cursor()

# SQL 更新語句
sql = "UPDATE EMPLOYEE SET AGE = AGE + 1
                          WHERE SEX = '%c'" % ('M')
try:
   # 執行SQL語句
   cursor.execute(sql)
   # 提交到數據庫執行
   db.commit()
except:
   # 發生錯誤時回滾
   db.rollback()

# 關閉數據庫連接
db.close()

8 數據庫的事務機制

  事務機制可以確保數據一致性。

  事務應該具有4個屬性:原子性、一致性、隔離性、持久性。這四個屬性通常稱為ACID特性。

  • 原子性(atomicity)。一個事務是一個不可分割的工作單位,事務中包括的諸操作要么都做,要么都不做。
  • 一致性(consistency)。事務必須是使數據庫從一個一致性狀態變到另一個一致性狀態。一致性與原子性是密切相關的。
  • 隔離性(isolation)。一個事務的執行不能被其他事務干擾。即一個事務內部的操作及使用的數據對並發的其他事務是隔離的,並發執行的各個事務之間不能互相干擾。
  • 持久性(durability)。持續性也稱永久性(permanence),指一個事務一旦提交,它對數據庫中數據的改變就應該是永久性的。接下來的其他操作或故障不應該對其有任何影響。

  Python DB API 2.0 的事務提供了兩個方法 commit 或 rollback。

  比如:

# SQL刪除記錄語句
sql = "DELETE FROM EMPLOYEE WHERE AGE > '%d'" % (20)
try:
   # 執行SQL語句
   cursor.execute(sql)
   # 向數據庫提交
   db.commit()
except:
   # 發生錯誤時回滾
   db.rollback()

  對於支持事務的數據庫, 在Python數據庫編程中,當游標建立之時,就自動開始了一個隱形的數據庫事務。

  commit()方法游標的所有更新操作,rollback()方法回滾當前游標的所有操作。每一個方法都開始了一個新的事務。

9 常用函數

  下面總結一下常用的函數:

  1)Connect() 方法用於創建數據庫的連接,里面可以指定參數:用戶名,密碼,主機等信息。這只是連接到了數據庫,要想操作數據庫需要創建游標。

  2)commit() 提交
  3)rollback() 回滾

  4)cursor用來執行命令的方法:
    callproc(self, procname, args):用來執行存儲過程,接收的參數為存儲過程名和參數列表,返回值為受影響的行數
    execute(self, query, args):執行單條sql語句,接收的參數為sql語句本身和使用的參數列表,返回值為受影響的行數
    executemany(self, query, args):執行單挑sql語句,但是重復執行參數列表里的參數,返回值為受影響的行數
    nextset(self):移動到下一個結果集
  5)cursor用來接收返回值的方法:
    fetchall(self):接收全部的返回結果行.
    fetchmany(self, size=None):接收size條返回結果行.如果size的值大於返回的結果行的數量,則會返回cursor.arraysize條數據.
    fetchone(self):返回一條結果行.
  6)scroll(self, value, mode='relative'):移動指針到某一行.如果mode='relative',則表示從當前所在行移動value條,如果 mode='absolute',則表示從結果集的第一行移動value條.

10 參考內容

  [1] W3CSCHOOL.CC python操作mysql數據庫

  [2] 一個人的旅行

  [3] 蟲師


免責聲明!

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



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