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

      

  • 相关阅读:
    Zoj 3511 线段树
    HDU 3340 Rain in ACStar 线段树+简单几何?
    BZOJ 2282 & 树的直径
    BZOJ 1121 & science
    BZOJ 1067 & Interval_Tree
    BZOJ 1001 & SPFA
    UVa 11181 条件概率
    并查集——启发式合并,路径压缩
    GSS系列(1)——GSS1&&GSS3
    评测脚本
  • 原文地址:https://www.cnblogs.com/cnn-ljc/p/13062785.html
Copyright © 2011-2022 走看看