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):持续性也称永久性,指一个事务一旦提交,它对数据库中数据的改变就应该是永久性的,接下来的其他操作或故障不应该对其有任何影响。

  

原文地址:https://www.cnblogs.com/cnn-ljc/p/13062785.html