python操作mysql

来源:互联网 发布:java api在线 编辑:程序博客网 时间:2024/06/05 19:34

1、mysql查询操作:

#!/usr/bin/python# -*- coding: UTF-8 -*-import MySQLdb# 打开数据库连接db = MySQLdb.connect("localhost","root","111111","analysis2" )# 使用cursor()方法获取操作游标 cursor = db.cursor()cursor.execute("SET NAMES utf8")#name = "wml' or 1 = '1"name = "wml"sql = "SELECT * FROM test_table WHERE name = %s"#sql_test = "SELECT * FROM test_table WHERE name = '%s'" % (name)try:    # 执行SQL语句,这种形式可以防止sql注入,只查询 name = 'wml' 的结果    '''      在cursor.execute() 的SQL语句中使用“%s”,而不要在SQL内直接添加参数。      如果你使用这项技术,数据库基础库将会自动添加引号,同时在必要的情况下转意你的参数。      相当于预处理操作    '''    cursor.execute(sql, name)    #这样写不具有防sql注入功能,同时查询  name = 'wml' 和  其他 的结果    #cursor.execute(sql_test)    """      fetchone(): 该方法获取下一个查询结果集。结果集是一个对象      fetchall():接收全部的返回结果行.      rowcount: 这是一个只读属性,并返回执行execute()方法后影响的行数。    """    #输出查询到的行数    print cursor.rowcount    #获取下一个记录列表#   for i in range(cursor.rowcount):#       row = cursor.fetchone()#       id = row[0]#       name = row[1]#       age = row[2]#       address = row[3]#       job = row[4]#       print "id=%d,name=%s,age=%s,address=%s,job=%s" % (id, name, age, address, job )    # 获取所有记录列表    results = cursor.fetchall()    for row in results:        id = row[0]        name = row[1]        age = row[2]        address = row[3]        job = row[4]        # 打印结果        print "id=%d,name=%s,age=%s,address=%s,job=%s" % (id, name, age, address, job )except BaseException , error:    print error# 关闭数据库连接db.close()

2、mysql插入操作:

#!/usr/bin/python# -*- coding: UTF-8 -*-import MySQLdb# 打开数据库连接db = MySQLdb.connect("localhost","root","111111","cheyun_analysis2" )# 使用cursor()方法获取操作游标 cursor = db.cursor()# SQL 插入语句#sql = "INSERT INTO test_table (name, age, address, job) VALUES ('Mac', 12, 'M', 'ie')"#sql = "INSERT INTO test_table (name, age, address, job) VALUES ('%s', %d, '%s', '%s')" %  ('aaa', 23, 'M', 'ie')#以预处理方式操作数字类型数据时,插入失败,必须是%s类型操作才行(不知道为什么)sql = "INSERT INTO test_table (name, age, address, job) VALUES (%s, %s, %s, %s)"try:    # 执行sql语句,传参固定    #cursor.execute(sql)    #cursor.execute(sql)    #执行sql语句,并传参    name= 'aaa","12'    #这样传参会预处理    cursor.execute(sql, (name, '23', 'M', 'ie'))    # 提交到数据库执行    db.commit()except BaseException, asd:    # Rollback in case there is any error    db.rollback()    #输出错误原因    print asd# 关闭数据库连接db.close()

3、数据库更新操作:

#!/usr/bin/python# -*- coding: UTF-8 -*-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()

4、删除操作:

#!/usr/bin/python# -*- coding: UTF-8 -*-import MySQLdb# 打开数据库连接db = MySQLdb.connect("localhost","testuser","test123","TESTDB" )# 使用cursor()方法获取操作游标 cursor = db.cursor()# SQL 删除语句sql = "DELETE FROM EMPLOYEE WHERE AGE > '%d'" % (20)try:   # 执行SQL语句   cursor.execute(sql)   # 提交修改   db.commit()except:   # 发生错误时回滚   db.rollback()# 关闭连接db.close()

5、事务:
事务机制可以确保数据一致性。
事务应该具有4个属性:原子性、一致性、隔离性、持久性。这四个属性通常称为ACID特性。
原子性:一个事务是一个不可分割的工作单位,事务中包括的诸操作要么都做,要么都不做。
一致性:事务必须是使数据库从一个一致性状态变到另一个一致性状态。一致性与原子性是密切相关的。
隔离性:一个事务的执行不能被其他事务干扰。并发执行的各个事务之间不能互相干扰。
持久性:一个事务一旦提交,它对数据库中数据的改变就应该是永久性的。接下来的其他操作或故障不应该对其有任何影响。

实例:

# SQL删除记录语句sql = "DELETE FROM EMPLOYEE WHERE AGE > '%d'" % (20)try:   # 执行SQL语句   cursor.execute(sql)   # 向数据库提交   db.commit()except:   # 发生错误时回滚   db.rollback()

注意:

对于支持事务的数据库, 在Python数据库编程中,当游标建立之时,就自动开始了一个隐形的数据库事务。
commit()方法游标的所有更新操作,rollback()方法回滚当前游标的所有操作。
每一个方法都开始了一个新的事务

6、批量执行sql语句:

#coding=utf-8import MySQLdbconn= MySQLdb.connect(        host='localhost',        port = 3306,        user='root',        passwd='123456',        db ='test',        )cur = conn.cursor()#一次插入多条记录sqli="insert into student values(%s,%s,%s,%s)"cur.executemany(sqli,[    ('3','Tom','1 year 1 class','6'),    ('3','Jack','2 year 1 class','7'),    ('3','Yaheng','2 year 2 class','7'),    ])cur.close()conn.commit()conn.close()

executemany():可以一次插入多条值,执行单挑sql语句,但是重复执行参数列表里的参数,返回值为受影响的行数。

0 0