分析解决Python中sqlalchemy数据库连接池QueuePool异常

 更新时间:2021年09月22日 10:08:31   作者:CXYhh121  
这篇文章主要来给大家分析sqlalchemy数据库连接池QueuePool的异常,给大家用详细的图文方式做出了解决的方案,有需要的朋友可以借鉴参考下,希望可以有所帮助

数据库相关错误的解决办法

错误一:数据库连接池超过限制

SqlAlchemy QueuePool limit overflow

在这里插入图片描述

造成连接数超过数据库连接池的限制,有两方面的原因,第一个是由于数据库连接池数比较小,因此当连接数稍微增加的时候就会超过限制,另一个原因就是在使用完数据库连接后未能即使释放,最后造成数据连接数持续增加从而超出数据库连接池的限制,所以我们也可以从这两个方面来解决这个问题,但是根本上还是得解决后一个原因造成的问题,不然即便是将数据库连接池增大时间长之后也还是会出现相同的问题。

解决办法

  • 方法一

python和java都有finally关键字,在执行完所有代码之后再执行finally处的代码,有这个关键字相助就让我们能够很好的解决这个问题,只要在进行完所有的数据库操作之后将数据库连接关闭即可。

connection = DBSession.connection()
try:
    rescount = connection.execute("select resource_id,count(resource_id) as total FROM resourcestats")
    #do something
finally:
    connection.close()
  • 方法二

学过python的小可爱们都知道python有个很好用的东西叫做装饰器,因为方式的解决办法在针对一个函数操作数据库的时候还是比较好用的,但是在一个项目中绝对是不止一个操作数据的函数的,如果在每个操作数据库函数的后方都加上finally关键值的话,会显得很累赘不说,如果有些函数忘记加了也会很麻烦,这个时候装饰器就显得很有用了,只要在函数上加上一个关闭数据库连接的装饰器,就能够在所有数据库操作结束之后关闭数据库连接

如果有不了解python的装饰器的可以看一下这个文章:理解Python 装饰器看这一篇就够了

def shutdown_session(func):
    @wraps(func)
    def wrapper(*args, **kwargs):
        result, msg = func(*args, **kwargs)
        db.session.close()
        db.session.rollback()
        return result, msg
    return wrapper

在数据库操作函数前加上上面的装饰器即可解决对应的问题

错误二:数据库事务未回滚

在这里插入图片描述

查询报错:sqlalchemy.exc.InvalidRequestError: Can't reconnect until invalid transaction is rolled back
原因是:连接断开后,事务没有回滚,残留的锁导致后续的查询报错.sqlalchemy对每一个查询和插入等操作都是一个事务。

# main.py
from models import OrderInfo 
from sqlalchemy.exc import InvalidRequestError
try:
    order = OrderInfo.query.filter_by(task_id=user_dict.get('task_id')).first()
    order.status = 'COMPLETE'
    db.session.commit()
except InvalidRequestError:
    db.session.rollback()
except Exception as e:
    print(e)

解决:在所有的数据库操作的时候捕捉异常进行事务的回滚。

以上就是分析解决sqlalchemy数据库连接池QueuePool异常的详细内容,更多关于sqlalchemy数据库连接池QueuePool异常的资料请关注脚本之家其它相关文章!

相关文章

  • 哈工大自然语言处理工具箱之ltp在windows10下的安装使用教程

    哈工大自然语言处理工具箱之ltp在windows10下的安装使用教程

    这篇文章主要介绍了哈工大自然语言处理工具箱之ltp在windows10下的安装使用教程,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2020-05-05
  • python 查找轮廓的实现示例

    python 查找轮廓的实现示例

    边缘检测是一种从图像中提取轮廓和特征的技术,本文主要介绍了python查找轮廓的实现示例,具有一定的参考价值,感兴趣的可以了解一下
    2024-07-07
  • python 实现屏幕录制示例

    python 实现屏幕录制示例

    今天小编就为大家分享一篇python 实现屏幕录制示例,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2019-12-12
  • pytorch自定义loss损失函数

    pytorch自定义loss损失函数

    这篇文章主要介绍了pytorch自定义loss损失函数,自定义loss的方法有很多,本文要介绍的是把loss作为一个pytorch的模块,下面详细资料需要的小伙伴可以参考一下
    2022-02-02
  • Python statistics模块示例详解

    Python statistics模块示例详解

    这篇文章主要介绍了Python statistics模块示例详解,本文总结了 statistics 模块的常规操作,对于数据分析还是非常有益处的,需要的朋友可以参考下
    2023-05-05
  • python Pandas时序数据处理

    python Pandas时序数据处理

    这篇文章主要介绍了python Pandas时序数据处理,文章围绕主题展开详细的内容介绍,具有一定的参考价值,需要的小伙伴可以参考一下
    2022-06-06
  • Python跳出循环语句continue与break的区别

    Python跳出循环语句continue与break的区别

    这篇文章主要介绍了Python跳出循环语句continue与break的区别,本文用实例来说明它们之间的区别,简单易记易懂,需要的朋友可以参考下
    2014-08-08
  • python读取csv文件并把文件放入一个list中的实例讲解

    python读取csv文件并把文件放入一个list中的实例讲解

    下面小编就为大家分享一篇python读取csv文件并把文件放入一个list中的实例讲解,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2018-04-04
  • Python的爬虫包Beautiful Soup中用正则表达式来搜索

    Python的爬虫包Beautiful Soup中用正则表达式来搜索

    这篇文章主要介绍了Python的爬虫包Beautiful Soup中用正则表达式来搜索的技巧,包括使用正则表达式去搜索多种可能的关键字以及查找属性值未知的标签等,需要的朋友可以参考下
    2016-01-01
  • python中struct模块之字节型数据的处理方法

    python中struct模块之字节型数据的处理方法

    今天小编就为大家分享一篇python中struct模块之字节型数据的处理方法,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2019-08-08

最新评论