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