本文實例講述了python中MySQLdb模塊用法。分享給你們供你們參考。具體用法分析以下:php
MySQLdb其實有點像php或asp中鏈接數據庫的一個模式了,只是MySQLdb是針對mysql鏈接了接口,咱們能夠在python中鏈接MySQLdb來實現數據的各類操做。html
python鏈接mysql的方案有oursql、PyMySQL、 myconnpy、MySQL Connector 等,不過本篇要說的確是另一個類庫MySQLdb,MySQLdb 是用於Python連接Mysql數據庫的接口,它實現了 Python 數據庫 API 規範 V2.0,基於 MySQL C API 上創建的。能夠從:https://pypi.python.org/pypi/MySQL-python 進行獲取和安裝,並且不少發行版的linux源裏都有該模塊,能夠直接經過源安裝。python
1、數據庫鏈接mysql
MySQLdb提供了connect方法用來和數據庫創建鏈接,接收數個參數,返回鏈接對象:
linux
複製代碼代碼以下:sql
conn=MySQLdb.connect(host="localhost",user="root",passwd="jb51",db="test",charset="utf8")數據庫
比較經常使用的參數包括:
host:數據庫主機名.默認是用本地主機
user:數據庫登錄名.默認是當前用戶
passwd:數據庫登錄的祕密.默認爲空
db:要使用的數據庫名.沒有默認值
port:MySQL服務使用的TCP端口.默認是3306
charset:數據庫編碼
更多關於參數的信息能夠查這裏 http://mysql-python.sourceforge.net/MySQLdb.html編程
而後,這個鏈接對象也提供了對事務操做的支持,標準的方法:
commit() 提交
rollback() 回滾併發
看一個簡單的查詢示例以下:
fetch
複製代碼代碼以下:
#!/usr/bin/python
# encoding: utf-8
import MySQLdb
# 打開數據庫鏈接
db = MySQLdb.connect("localhost","root","361way","test" )
# 使用cursor()方法獲取操做遊標
cursor = db.cursor()
# 使用execute方法執行SQL語句
cursor.execute("SELECT VERSION()")
# 使用 fetchone() 方法獲取一條數據庫。
data = cursor.fetchone()
print "Database version : %s " % data
# 關閉數據庫鏈接
db.close()
腳本執行結果以下:
Database version : 5.5.40
2、cursor方法執行與返回值
cursor方法提供兩類操做:1.執行命令,2.接收返回值 。
cursor用來執行命令的方法
複製代碼代碼以下:
//用來執行存儲過程,接收的參數爲存儲過程名和參數列表,返回值爲受影響的行數
callproc(self, procname, args)
//執行單條sql語句,接收的參數爲sql語句自己和使用的參數列表,返回值爲受影響的行數
execute(self, query, args)
//執行單挑sql語句,可是重複執行參數列表裏的參數,返回值爲受影響的行數
executemany(self, query, args)
//移動到下一個結果集
nextset(self)
cursor用來接收返回值的方法
//接收所有的返回結果行.
fetchall(self)
//接收size條返回結果行.若是size的值大於返回的結果行的數量,則會返回cursor.arraysize條數據
fetchmany(self, size=None)
//返回一條結果行
fetchone(self)
//移動指針到某一行.若是mode='relative',則表示從當前所在行移動value條,若是mode='absolute',則表示從結果集的第一行移動value條
scroll(self, value, mode='relative')
//這是一個只讀屬性,並返回執行execute()方法後影響的行數
rowcount
3、數據庫操做
一、建立database tables
若是數據庫鏈接存在咱們可使用execute()方法來爲數據庫建立表,以下所示建立表EMPLOYEE:
複製代碼代碼以下:
#!/usr/bin/python
# encoding: utf-8
import MySQLdb
# 打開數據庫鏈接
db = MySQLdb.connect("localhost","root","361way","test" )
# 使用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()
二、數據庫插入操做
複製代碼代碼以下:
#!/usr/bin/python
# encoding: utf-8
import MySQLdb
# 打開數據庫鏈接
db = MySQLdb.connect("localhost","root","361way","test" )
# 使用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()
這裏是一個單sql 執行的示例,cursor.executemany的用法感興趣的讀者能夠參看相關的aws主機資產管理系統示例。
上例也能夠寫成經過佔位符傳參的方式進行執行,以下:
複製代碼代碼以下:
#!/usr/bin/python
# encoding: utf-8
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 ('%s', '%s', '%d', '%c', '%d' )" % \
('Mac', 'Mohan', 20, 'M', 2000)
try:
# 執行sql語句
cursor.execute(sql)
# 提交到數據庫執行
db.commit()
except:
# 發生錯誤時回滾
db.rollback()
# 關閉數據庫鏈接
db.close()
也能夠以變量的方式傳遞參數,以下:
複製代碼代碼以下:
..................................
user_id = "test"
password = "password123"
con.execute('insert into Login values("%s", "%s")' % \
(user_id, password))
..................................
三、數據庫查詢操做
以查詢EMPLOYEE表中salary(工資)字段大於1000的全部數據爲例:
複製代碼代碼以下:
#!/usr/bin/python
# encoding: utf-8
import MySQLdb
# 打開數據庫鏈接
db = MySQLdb.connect("localhost","root","361way","test" )
# 使用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
四、數據庫更新操做
更新操做用於更新數據表的的數據,如下實例將 test表中的 SEX 字段所有修改成 'M',AGE 字段遞增1:
複製代碼代碼以下:
# encoding: utf-8
#!/usr/bin/python
import MySQLdb
# 打開數據庫鏈接
db = MySQLdb.connect("localhost","root","361way","test" )
# 使用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()
五、執行事務
事務機制能夠確保數據一致性。
事務應該具備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()方法回滾當前遊標的全部操做。每個方法都開始了一個新的事務。
但願本文所述對你們的Python程序設計有所幫助。