前言
任何应用都离不开数据,所以在学习python的时候,当然也要学习一个如何用python操作数据库了。MySQLdb就是python对mysql数据库操作的模块。今天写了个工具,目的是把csv中的数据插入到数据库中去。其中有一部分,是需要分别向两张表中插入两条数据,如果第二张表中的数据已经存在,那么第一张表中的数据也不需要插入。
然后通过百度查找发现,其实MySQLdb库,自带了事务处理的功能,pymysql库也是一样。
conn = MySQLdb.connect()返回一个连接对象 cursor = conn.cursor()返回一个游标对象
当我们使用cursor.execute(SQL)
执行一条Insert/Update/Delete语句后,我们需要使用conn.commit()
提交事务,否则,语句不会生效。
其实我们常用的commit()
,就是包含了一种事务处理的概念,如果你在commit()
之前,执行了多条语句,只有当commit()
之后,才会全部生效。
那么如果像文章开始提到的那样,执行两条插入语句,我们可以把conn.commit()
语句放在两条插入语句执行之后,并放在try语句块内,如果差生异常,我们可以使用:
conn.rollback()
这个语句可以使事务回滚,直到上一条conn.commit()
执行之后的位置。
所以,我的代码是这样写的,这里我就简单的写了,并没有用类来封装了:
try: cursor = conn.cursor() cursor.execute(insertSQL1) cursor.execute(insertSQL2) cursor.close() conn.commit() except Exception, e: cursor.close() conn.rollback()
总结
这就可以达到我们的目的了。其实更优雅的方法是,对事务处理进行一个封装,将处理过程写在自己的类的方法中,并接受1个SQL语句序列(可能包含1条或多条SQL语句)作为参数,返回事务执行状态即可。以上就是这篇文章的全部内容,希望本文的内容对大家的学习或者工作能带来一定的帮助。
免责声明:本站文章均来自网站采集或用户投稿,网站不提供任何软件下载或自行开发的软件! 如有用户或公司发现本站内容信息存在侵权行为,请邮件告知! 858582#qq.com
《魔兽世界》大逃杀!60人新游玩模式《强袭风暴》3月21日上线
暴雪近日发布了《魔兽世界》10.2.6 更新内容,新游玩模式《强袭风暴》即将于3月21 日在亚服上线,届时玩家将前往阿拉希高地展开一场 60 人大逃杀对战。
艾泽拉斯的冒险者已经征服了艾泽拉斯的大地及遥远的彼岸。他们在对抗世界上最致命的敌人时展现出过人的手腕,并且成功阻止终结宇宙等级的威胁。当他们在为即将于《魔兽世界》资料片《地心之战》中来袭的萨拉塔斯势力做战斗准备时,他们还需要在熟悉的阿拉希高地面对一个全新的敌人──那就是彼此。在《巨龙崛起》10.2.6 更新的《强袭风暴》中,玩家将会进入一个全新的海盗主题大逃杀式限时活动,其中包含极高的风险和史诗级的奖励。
《强袭风暴》不是普通的战场,作为一个独立于主游戏之外的活动,玩家可以用大逃杀的风格来体验《魔兽世界》,不分职业、不分装备(除了你在赛局中捡到的),光是技巧和战略的强弱之分就能决定出谁才是能坚持到最后的赢家。本次活动将会开放单人和双人模式,玩家在加入海盗主题的预赛大厅区域前,可以从强袭风暴角色画面新增好友。游玩游戏将可以累计名望轨迹,《巨龙崛起》和《魔兽世界:巫妖王之怒 经典版》的玩家都可以获得奖励。