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

      

  • 相关阅读:
    autocomplete自动完成搜索提示仿google提示效果
    实现子元素相对于父元素左右居中
    javascript 事件知识集锦
    让 IE9 以下的浏览器支持 Media Queries
    「2013124」Cadence ic5141 installation on CentOS 5.5 x86_64 (limited to personal use)
    「2013420」SciPy, Numerical Python, matplotlib, Enthought Canopy Express
    「2013324」ClipSync, Youdao Note, GNote
    「2013124」XDMCP Configuration for Remote Access to Linux Desktop
    「2013115」Pomodoro, Convert Multiple CD ISO to One DVD ISO HowTo.
    「2013123」CentOS 5.5 x86_64 Installation and Configuration (for Univ. Labs)
  • 原文地址:https://www.cnblogs.com/cnn-ljc/p/13062785.html
Copyright © 2011-2022 走看看