文章内容
2020/9/10 16:00:01,作 者: 黄兵
MySQLdb执行事务
最近有一个需求:将查询出来的数据插入到其他表,之后删除原来表的数据。
这里就涉及到数据库事务的问题:如果插入表失败,那么就不能删除这条数据。
这里就需要使用到数据库事务,下面是Python+MySQLdb的具体实现代码:
get_all = cur.fetchall() for item in get_all: sms_receive_id = item[0] phone_number = item[1] content = item[2] receive_time = item[3] is_type = item[4] show = item[5] phone_number_id = item[6] insert_sql = "INSERT INTO history_2019 (PhoneNumber, Content, SMS_ReceiveTime, Type, IsShow, PhoneNumber_id) values (%s,%s,%s,%s,%s,%s)" delete_sql = "DELETE FROM table_name WHERE id='{id}';".format(id=sms_receive_id) try: # 开始执行事务 # 插入数据 cur.execute(insert_sql, (phone_number, content, receive_time, is_type, show, phone_number_id)) # 删除数据 cur.execute(delete_sql) # 提交数据 mysql_conn.commit() except (MySQLdb.Error, MySQLdb.Warning) as e: self._logger_write_file.error( ' 执行插入和删除SQL命令的时候出现错误,具体错误内容: {error_message}'.format(error_message=e)) # 发生错误时回滚 cur.close() mysql_conn.rollback()
这里先对查询出来的数据插入到历史表,之后删除本条数据,都成功了提交数据,在try这里没有使用cur.close()的原因参考这篇文章:MySQLdb cursor closed
具体可以参考这篇文章:Python中MySQLdb的事务处理
参考资料:
1、https://www.cnblogs.com/feng18/p/5842196.html
黄兵个人博客原创。
转载请注明出处:黄兵个人博客 - MySQLdb执行事务
评论列表