文章内容
2020/9/10 15:51:03,作 者: 黄兵
MySQLdb cursor closed
在执行MySQL事务查询的时候,出现了如下错误:
cursor closed
具体错误代码如下:
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) # 游标关闭 cur.close() # 提交数据 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()
出现错误的原因:
第一个循环是将查询出来的数据插入到另外一张表,同时删除原来表中的数据,但是在遍历完成之后已经将游标关闭,也就是:
# 游标关闭 cur.close()
下次查询再次遍历的时候,游标已经关闭,所以才出现如上提示。
解决方案:
删除cur.close()
,在except
里面关闭游标,具体代码如下:
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()
黄兵个人博客原创。
转载请注明出处:黄兵个人博客 - MySQLdb cursor closed
评论列表