python-mysql,,数据库的事务机制:事


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


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

python连接mysql需要用到MySQLdb这个模块,MySQLdb的常用方法有:
cur.fetchone() # 该方法获取下一个查询结果集。结果集是一个对象
cur.fetchall() # 接收全部的返回结果行

例1:

 1 # -*- coding: utf-8 -*- 2 import MySQLdb 3  4 host = "localhost" 5 port = 3306 6 user = "root" 7 passwd = "pass" 8 db = "my_test_db" 9 10 conn = MySQLdb.connect(host=host, port=port, user=user, passwd=passwd, db = db) # 打开数据库连接11 cur = conn.cursor() # 使用cursor()方法获取操作游标12 try:13     sql = "insert into test values(‘str‘,1,-1)"14     cur.execute(sql)15     sql = "insert into te1st values(‘str‘,2,-2)" # 这是一条错误的sql,因为事务机制,所以上1条sql语句也不会执行16     cur.execute(sql)17     conn.commit() # 提交到数据库执行18 except:19     conn.rollback() # 发生错误时回滚20 sql = "select * from test"21 cur.execute(sql)22 print cur.fetchall()23 sql = "insert into test values(‘str‘,3,-3)" # 一条正确的插入语句24 cur.execute(sql)25 conn.commit() # 提交到数据库执行26 sql = "select * from test"27 cur.execute(sql)28 print cur.fetchall()29 conn.close() # 关闭数据库连接,一定要关闭,连接开太多会出问题

运行结果:

技术分享图片

例2:

 1 # -*- coding: utf-8 -*- 2 import MySQLdb 3  4 host = "localhost" 5 port = 3306 6 user = "root" 7 passwd = "pass" 8 db = "my_test_db" 9 10 conn = MySQLdb.connect(host=host, port=port, user=user, passwd=passwd, db = db, charset=‘utf8‘) # 打开数据库连接,并设置编码11 print conn.get_autocommit()12 conn.autocommit(1) # 设置自动提交,默认为false13 print conn.get_autocommit()14 cur = conn.cursor() # 使用cursor()方法获取操作游标15 try:16     sql = "insert into test values(‘str‘,1,-1)"17     cur.execute(sql)18     sql = "insert into te1st values(‘str‘,2,-2)" # 这一条出错了并不会影响上一条sql语句的执行19     cur.execute(sql)20 except:21     conn.rollback() # 发生错误时回滚22 sql = "select * from test"23 cur.execute(sql)24 print cur.fetchall()25 sql = "insert into test values(‘str‘,3,-3)" # 一条正确的插入语句26 cur.execute(sql)27 sql = "select * from test"28 cur.execute(sql)29 print cur.fetchall()30 conn.close() # 关闭数据库连接,一定要关闭,连接开太多会出问题

运行结果:

技术分享图片

python-mysql

评论关闭