首页 > 代码库 > MySQL(三)

MySQL(三)

摘录自http://www.runoob.com/python/python-mysql.html

python操作mysql数据库

Python标准数据库接口为Python DB-API,Python DB-API为开发人员提供了数据库应用编程接口。

Python数据库接口支持非常多的数据库,包括:

  • GadFly
  • mSQL
  • MySQL
  • PostgreSQL
  • Microsoft SQL Server 2000
  • Informix
  • Interbase
  • Oracle
  • Sybase

不同的数据库你需要下载不同的DB API模块。

DB-API是一个规范,它定义了一系列必须的对象和数据库存取方式,以便为各种各样的底层数据库系统和多种多样的数据库接口程序提供一致的访问接口。

Python的DB-API,为大多数的数据库实现了接口,使用它连接各数据库后,就可以用相同的方式操作各种数据库。

Python DB-API使用流程:

  • 引入API模块
  • 获取与数据库的连接
  • 执行SQL语句和存储过程
  • 关闭数据库连接

什么是MySQLdb?

MySQLdb是用于Python链接Mysql数据库的接口,它实现了Python数据库API规范V2.0,基于MySQL C API上建立的。

 

数据库连接

连接数据库前,请先确认一下事项:

  • 已经创建了数据库TESTDB
  • 在TESTDB数据库中已经创建了表EMPLOYEE
  • EMPLOYEE表字段为FIRST_NAME,LAST_NAME,AGE,SEX和INCOME
  • 连接数据库TESTDB使用的用户名和密码已知
  • 已经安装了Python MySQLdb模块

实例:

以下实例链接Mysql的TESTDB数据库:

 1 #!/usr/bin/python
 2 # -*- coding: UTF-8 -*-
 3 
 4 import MySQLdb
 5 
 6 #打开数据库连接
 7 db=MySQLdb.connect("localhost","root","a616366255","TESTDB")
 8 
 9 #使用cursor()方法获取操作游标
10 cursor=db.cursor()
11 
12 #使用execute方法执行SQL语句
13 cursor.execute("SELECT VERSION()")
14 
15 #使用fetchone()方法获取一条数据库
16 data=http://www.mamicode.com/cursor.fetchone()
17 
18 print "Database version : %s "%data
19 
20 #关闭数据库连接
21 db.close()

以上脚本的输出结果为:

Database version : 5.7.17-log

 

创建数据库表

如果数据库连接存在可以使用execute()方法来为数据库创建表,如下图所示创建表EMPLOYEE:

 1 #!/usr/bin/python
 2 # -*- coding: UTF-8 -*-
 3 
 4 import MySQLdb
 5 
 6 #打开数据库连接
 7 db=MySQLdb.connect("localhost","root","a616366255","TESTDB")
 8 
 9 #使用cursor()方法获取操作游标
10 cursor=db.cursor()
11 
12 #如果数据表已经存在用execute()方法删除表
13 cursor.execute("DROP TABLE IF EXISTS EMPLOYEE")
14 
15 #创建数据表SQL语句
16 sql="""CREATE TABLE EMPLOYEE(
17        FIRST_NAME CHAR(20) NOT NULL,
18        LAST_NAME CHAR(20),
19        AGE INT,
20        SEX CHAR(1),
21        INCOME FLOAT)"""
22 
23 cursor.execute(sql)
24 
25 #关闭数据库连接
26 db.close()

 

数据库插入操作

以下实例使用执行SQL INSERT语句向表EMPLOYEE插入记录:

 1 #!/usr/bin/python
 2 # -*- coding: UTF-8 -*-
 3 
 4 import MySQLdb
 5 
 6 #打开数据库连接
 7 db=MySQLdb.connect("localhost","root","a616366255","TESTDB")
 8 
 9 #使用cursor()方法获取操作游标
10 cursor=db.cursor()
11 
12 #SQL插入语句
13 sql="""INSERT INTO EMPLOYEE(FIRST_NAME,
14        LAST_NAME,AGE,SEX,INCOME)
15        VALUES(‘Mac‘,‘Mohan‘,20,‘M‘,2000)"""
16 
17 try:
18     #执行sql语句
19     cursor.execute(sql)
20     #提交到数据库执行
21     db.commit()
22 except:
23     #Rollback in case there is any error
24     db.rollback()
25 
26 #关闭数据库连接
27 db.close()

 

数据库查询操作

Python查询Mysql使用fetchone()方法获取单条数据,使用fetchall()方法获取多条数据。

  • fetchone():该方法获取下一个查询结果集。结果集是一个对象
  • fetchall():接受全部的返回结果行
  • rowcount:这是一个只读属性,并返回执行execute()方法后影响的行数

实例:

查询EMPLOYEE表中INCOME字段大于1000的所有数据:

#!/usr/bin/python
# -*- coding: UTF-8 -*-

import MySQLdb

#打开数据库连接
db=MySQLdb.connect("localhost","root","a616366255","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 fetch data"

#关闭数据库连接
db.close()

以上脚本执行结果如下:

fname=Mac,lname=Mohan,age=20,sex=M,income=2000

 


 

数据库更新操作

更新操作用于更新数据表的数据,以下实例将EMPLOYEE表中的SEX字段为‘M‘的AGE字段增加1

 1 #!/usr/bin/python
 2 # -*- coding: UTF-8 -*-
 3 
 4 import MySQLdb
 5 
 6 #打开数据库连接
 7 db=MySQLdb.connect("localhost","root","a616366255","TESTDB")
 8 
 9 #使用cursor()方法获取操作游标
10 cursor=db.cursor()
11 
12 #SQL更新语句
13 sql="UPDATE EMPLOYEE SET AGE=AGE+1 WHERE SEX=‘%c‘"%(M)
14 
15 try:
16     #执行sql语句
17     cursor.execute(sql)
18     #提交到数据库执行
19     db.commit()
20 except:
21     db.rollback()
22 
23 #关闭数据库连接
24 db.close()

删除操作

删除操作用于删除数据表中的数据,以下实例演示了删除数据表EMPLOYEE中AGE>20的所有数据:

 1 #!/usr/bin/python
 2 # -*- coding: UTF-8 -*-
 3 
 4 import MySQLdb
 5 
 6 #打开数据库连接
 7 db=MySQLdb.connect("localhost","root","a616366255","TESTDB")
 8 
 9 #使用cursor()方法获取操作游标
10 cursor=db.cursor()
11 
12 #SQL删除语句
13 sql="DELETE FROM EMPLOYEE WHERE AGE > ‘%d‘"%(20)
14 
15 try:
16     #执行sql语句
17     cursor.execute(sql)
18     #提交到数据库执行
19     db.commit()
20 except:
21     db.rollback()
22 
23 #关闭数据库连接
24 db.close()

执行事务

事务机制可以确保数据一致性。

事务应该具有四个属性:原子性、一致性、隔离性、持久性。这四个属性通常成为ACID特性。

  • 原子性(atomicity)。一个事务是一个不可分割的工作单位,事务中包括的操作要么都做要么都不做。
  • 一致性(consistency)。事务必须是数据库从一个一致性状态变为另一个一致性状态。
  • 隔离性(isolation)。一个事务不能被其它事务干扰,即是指一个事务所用的数据和操作对并发执行的其他事务来说是隔离的。
  • 持久性(durability)。一个事务一旦提交,对数据库中数据的改变就是永久的,接下来的其它操作和故障不应该对其有影响。

Python DB API 2.0的事务提供了两个方法commit和rollback。

在上面的插入删除实例当中有体现。对于支持事务的数据库,在Python数据库编程中,当游标建立之时,就自动开始了一个隐形的数据库事务。commit()方法提交游标的所有操作,rollback()方法回滚当前游标的所有操作。每一个方法都开始了一个新的事务。

 

开通博客主要是为了记录自己平时的学习经历,这些内容都是从菜鸟教程上看到然后按照自己的理解和记忆一个字一个字打出来的,希望能够记录下自己学到的一些东西,一段时间之后还可以重新看看。

 

MySQL(三)