在Windows平台上安装mysql模块用于Python开发
用python连接mysql的时候,需要用的安装版本,源码版本容易有错误提示。下边是打包了32与64版本。
MySQL-python-1.2.3.win32-py2.7.exe
MySQL-python-1.2.3.win-amd64-py2.7.exe
我使用的为window10 64,故安装了64位版本
下载地址:http://vdisk.weibo.com/s/aBSXQ0shtv7cN
Python 标准数据库接口为 Python DB-API,Python DB-API为开发人员提供了数据库应用编程接口
DB-API 是一个规范. 它定义了一系列必须的对象和数据库存取方式, 以便为各种各样的底层数据库系统和多种多样的数据库接口程序提供一致的访问接口 。
Python的DB-API,为大多数的数据库实现了接口,使用它连接各数据库后,就可以用相同的方式操作各数据库。
Python DB-API使用流程:
- 引入 API 模块。
- 获取与数据库的连接。
- 执行SQL语句和存储过程。
- 关闭数据库连接。
MySQLdb 是用于Python链接Mysql数据库的接口
在python下执行
import MySQLdb
若不出错,则mysql模块安装成功
创建数据库 TESTDB.在TESTDB数据库中创建表 EMPLOYEE,进行增删改查操作。
执行事务
事务机制可以确保数据一致性。
事务应该具有4个属性:原子性、一致性、隔离性、持久性。这四个属性通常称为ACID特性。
原子性(atomicity)。一个事务是一个不可分割的工作单位,事务中包括的诸操作要么都做,要么都不做。一致性(consistency)。事务必须是使数据库从一个一致性状态变到另一个一致性状态。一致性与原子性是密切相关的。删除一个元素,与其相关的元素都应删除。隔离性(isolation)。一个事务的执行不能被其他事务干扰。即一个事务内部的操作及使用的数据对并发的其他事务是隔离的,并发执行的各个事务之间不能互相干扰。不要同时多用户访问数据库。持久性(durability)。持续性也称永久性(permanence),指一个事务一旦提交,它对数据库中数据的改变就应该是永久性的。接下来的其他操作或故障不应该对其有任何影响。通过二进制事务日志记录事务过程中数据库系统变化。 Python DB API 2.0 的事务提供了两个方法 commit 或 rollback。
对于支持事务的数据库, 在Python数据库编程中,当游标建立之时,就自动开始了一个隐形的数据库事务。
commit()方法游标的所有更新操作,rollback()方法回滚当前游标的所有操作。每一个方法都开始了一个新的事务
#coding:utf-8
#引用模块
import MySQLdb as mdb
#打开数据库连接
db = mdb.connect("localhost","root","chejian","TESTDB");
#获取操作游标
cursor = db.cursor()
#若表存在,则删除。。。 当不存在时,这儿执行后的警告并不影响以后语句的执行
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)
#插入记录 可以使用变量向SQL语句中传递参数
sql ="""INSERT INTO EMPLOYEE(FIRST_NAME,LAST_NAME,AGE,SEX,INCOME) VALUES('Mac','Mohan',20,'M',2000)"""
sql1 ="""INSERT INTO EMPLOYEE(FIRST_NAME,LAST_NAME,AGE,SEX,INCOME) VALUES('FreeBSD','Mohan',19,'M',1000)"""
try:
cursor.execute(sql)
cursor.execute(sql1)
#当对数据库数据改变时,提交到数据库执行
db.commit()
except:
#若有错误,则回滚
db.rollback()
#数据库查询
sql = "SELECT * FROM EMPLOYEE \
WHERE INCOME > '%d' " %(500)
try:
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 fetcg data"
#更新数据库
sql = "UPDATE EMPLOYEE SET AGE = AGE + 1 WHERE SEX = '%c'" % ('M')
try:
cursor.execute(sql)
db.commit()
except:
db.rollback()
#删除操作
sql = "DELETE FROM EMPLOYEE WHERE AGE > '%d' " % (20)
try:
cursor.execute(sql)
db.commit()
except:
db.rollback()
#关闭数据库连接
db.close()