1. 程式人生 > 其它 >Python操作資料庫

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)引入DB—API模組;2)獲取與資料庫的連線;3)執行SQL語句和儲存過程;4)關閉資料庫連線

2、資料庫連線:連線資料庫前,使用者需確認:連線資料庫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

3、建立資料庫:資料庫表名為:EMPLAYEEMPLOYEE,資料表字段為: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()

4、使用 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,commmit()這句來提交事務,使用fetchall()方法獲取很多條資料

·fetchone():該方法獲取下一個查詢結果集,結果集是一個物件

·fetchall():接收全部的返回結果行

·rowcount():這是一個只讀屬性,並返回執行execute()方法後影響的行數

查詢EMPLAYEE表中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

4、資料庫更新操作:更新操作作用於更新資料表的資料

將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()

5、資料庫的事務機制:事務機制可以確保一致性,事務應該有4個屬性:原子性、一致性、隔離性、永久性,這四個屬性通常稱為ACID特性

原子性(atomicity):一個事務是一個不可分割的工作單位,事務中包括的諸操作要麼都做,要麼都不做

一致性(consistency):事務必須是使資料庫從一個一致性狀態變到另一個一致性狀態,一致性與原子性是密切相關的

隔離性(isolation):一個事務的執行不能被其他事務干擾,即一個事務內部的操作及使用的資料對併發的其他事務是隔離的,併發執行的各個事務之間不能互相干擾

永續性(durability):持續性也稱永久性,指一個事務一旦提交,它對資料庫中資料的改變就應該是永久性的,接下來的其他操作或故障不應該對其有任何影響。