博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
python操作mysql
阅读量:4677 次
发布时间:2019-06-09

本文共 2354 字,大约阅读时间需要 7 分钟。

数据库的事务机制:

事务机制可以确保数据一致性。
事务应该具有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() # 关闭数据库连接,一定要关闭,连接开太多会出问题

运行结果:

 

转载于:https://www.cnblogs.com/ACGame/p/8442056.html

你可能感兴趣的文章
详解JS设计模式
查看>>
CPSR寄存器
查看>>
Java基础50题test7—处理字符串
查看>>
保险行业电话外呼型呼叫中心方案
查看>>
自建型呼叫中心
查看>>
input file 文件上传,js控制上传文件的大小和格式
查看>>
Day 6 函数与模块
查看>>
java类中final方法的作用
查看>>
【58同城模拟】第一日。框架。
查看>>
MVC---- DataSet 页面遍历
查看>>
WebApi请求原理
查看>>
[Node.js] node-persist: localStorage on the server
查看>>
jquery.event 研究学习之bind篇
查看>>
LOJ #108. 多项式乘法
查看>>
军事机密(Secret.pas)
查看>>
正向代理和反向代理
查看>>
@RequestParam、@RequestBody和@ModelAttribute区别
查看>>
.net 缓存
查看>>
egret 取消自动连接github
查看>>
libusb开发指南
查看>>