在Python程序中遇到了一个报错raise err.InterfaceError(0, ""), pymysql.err.InterfaceError: (0, '')详细报错内容如下。本文地址:http://www.04007.cn/article/1056.html,未经许可,不得转载.
File "/usr/local/lib/python3.8/site-packages/pymysql/connections.py", line 479, in rollback self._execute_command(COMMAND.COM_QUERY, "ROLLBACK") File "/usr/local/lib/python3.8/site-packages/pymysql/connections.py", line 793, in _execute_command raise err.InterfaceError(0, "") pymysql.err.InterfaceError: (0, '')本文地址:http://www.04007.cn/article/1056.html,未经许可,不得转载.
从报错的提示来看是MYSQL的连接异常,数据库操作对象实例未注销,但是持有的数据库连接已经失效,导致后续数据库操作无法进行。在网上也看到了其它的一些解决方法比如添加重新连接的方法ping,但我试过了在这里不管用,我这里的处理是background_tasks后台任务的处理。在程序调试中发现处理background_tasks后台任务和前端业务是不一样的线程,处理WEB请求的线程是MainThread,且线程ID不变(单线程),但处理后台任务的线程是ThreadPoolExecutor-0_0之类的,且一直在变化。我认为就是这个地方导致的上面的错误,后台任务使用的线程与前端WEB请求的主线程混用一些和数据库相关的类导致的MYsql的连接丢失这种异常,最终通过将background_tasks后台任务的数据库连接和主业务线程的数据库连接分开实现问题解决。本文地址:http://www.04007.cn/article/1056.html,未经许可,不得转载.
#添加重新连接方法 self.con.ping(reconnect=True) self.cur = self.con.cursor() try: #检查连接是否断开 conn.ping(reconnect=True) self.cur.execute(sql) except Exception as e: print("错误:" + str(e))本文地址:http://www.04007.cn/article/1056.html,未经许可,不得转载.
本文地址:http://www.04007.cn/article/1056.html 未经许可,不得转载. 手机访问本页请扫描右下方二维码.
![]() |
![]() |
手机扫码直接打开本页面 |