環(huán)境
1.python2.7
2.安裝MySQLdb軟件允乐,windows下之間安裝二進(jìn)制編譯版本即可
3.PythonWin或者其他python IDE猛遍。
解決的問(wèn)題
每一種數(shù)據(jù)庫(kù)都有其自己的官方API谷誓,而這些API是不同的掸绞,這也就意味著如果我們開(kāi)發(fā)了一個(gè)基于postgresql的程序淹遵,想要換成MySQL便需要重新開(kāi)發(fā)。因此遂跟,我們想要定義一個(gè)通用的數(shù)據(jù)庫(kù)調(diào)用API逃沿,以減少我們?cè)诟鼡Q數(shù)據(jù)庫(kù)時(shí)的工作量。在通用的API和數(shù)據(jù)庫(kù)之間通過(guò)相應(yīng)的中間模塊來(lái)實(shí)現(xiàn)漩勤,比如在操作MySQL的時(shí)候感挥,我導(dǎo)入MySQLdb這個(gè)中間模塊缩搅,在使用postgresql的時(shí)候我們導(dǎo)入postgresqldb模塊越败,這樣我們的代碼就不用修改而只需要導(dǎo)入不同的模塊即可。
操作流程
1.導(dǎo)入MySQLdb模塊
2.通過(guò)MySQLdb模塊中的Connect()函數(shù)硼瓣,并在函數(shù)中填入相應(yīng)的參數(shù)來(lái)生成一個(gè)connection對(duì)象究飞,這樣便建立了和數(shù)據(jù)庫(kù)之間的連接。
3.通過(guò)connection對(duì)象中的cursor()函數(shù)堂鲤,生成一個(gè)cursor對(duì)象亿傅,我們通過(guò)這個(gè)對(duì)象中的函數(shù)對(duì)數(shù)據(jù)庫(kù)進(jìn)行相應(yīng)的操作。
4.以查詢?yōu)槔疗埽瑘?zhí)行cursor對(duì)象的execute()函數(shù)葵擎,函數(shù)以字符串形式的SQL語(yǔ)句作為參數(shù)。
5.通過(guò)cursor對(duì)象的fetchone半哟、fetchmany酬滤、fetchall函數(shù)獲取查詢結(jié)果。
6.關(guān)閉cursor
7.關(guān)閉connection
代碼示例
import MySQLdb connection = MySQLdb.Connect( host = 'ip或者localhost', port = 3306, user = 'root', passwd = '密碼', db = 'mydb', charset = 'utf8' ) cursor = connection.cursor() sql = 'select * from user' cursor.execute(sql) rs = cursor.fetchall() for item in rs: print item cursor.close() connection.close()
事務(wù)
事務(wù)是一個(gè)程序一次訪問(wèn)和更新數(shù)據(jù)庫(kù)時(shí)執(zhí)行的所有操作的集合寓涨。
事務(wù)的性質(zhì)
- 原子性:所以操作要么都做要么都不做
- 一致性:事務(wù)必須使數(shù)據(jù)庫(kù)從一個(gè)一致性狀態(tài)轉(zhuǎn)換到另一個(gè)一致性狀態(tài)盯串,比如:一次銀行轉(zhuǎn)賬,A轉(zhuǎn)給B100元戒良,轉(zhuǎn)賬前兩者存款之和與轉(zhuǎn)賬后兩個(gè)存款之和相等体捏,是一致性狀態(tài)
- 隔離性:多個(gè)事務(wù)同時(shí)執(zhí)行時(shí),一個(gè)事務(wù)的執(zhí)行不能被其它事務(wù)所干擾
- 持久性:事務(wù)一旦提交,它對(duì)數(shù)據(jù)庫(kù)的改變將是永久的
MySQL中事務(wù)的操作
1.關(guān)閉事務(wù)自動(dòng)提交:connection.autocommit(False)
2.正常結(jié)束事務(wù):connection.commit()
3.事務(wù)回滾:connection.rollback()
4.事務(wù)只影響增刪查改中增刪改几缭,也即是說(shuō)如果關(guān)閉了自動(dòng)提交河泳,那么我們?cè)谶M(jìn)行增刪改后如果沒(méi)有手動(dòng)進(jìn)行事務(wù)提交,那么數(shù)據(jù)庫(kù)便不會(huì)進(jìn)行更改年栓。而查詢因?yàn)閷?duì)數(shù)據(jù)庫(kù)的數(shù)據(jù)沒(méi)有影響乔询,因而不受此影響。