多线程访问数据库报错

发布时间 2023-08-05 17:44:52作者: 荣耀之心
在用flask实现http服务器的时候,只需要指定路由和访问方法,前端的访问就可以获取到,然后触发后端的响应函数,如果后端响应函数用公用的sql connection的时候,可能会导致数据库连接冲突报错,报错内容如下:

AttributeError: 'NoneType' object has no attribute 'read' 

参考这篇博客的解释:https://blog.csdn.net/qq_41767116/article/details/119290133

解决方法:避免使用global connect,在每个响应函数里面新建一个数据库连接实体,使用完毕后释放,因此可以封装一个数据库操作的类,init函数建立连接,del函数close连接。

此外,在使用数据库过程中,会有数据库断连的情况,可以封装一个数据库执行函数,在每次调用执行SQL语句时先重连一下:

def execute_sqlorder(self, sql_order, values=None):
      """
        封装的SQL执行语句
        :param sql_order:
        :param values:
        :return:
        """
        try:
            self.connection.ping(reconnect=True)
            self.cursor.execute(sql_order, values)
            self.connection.commit()
        except:
            self.connection.rollback()  # 出错回滚
            print("error")
            return -1
        return 1