分析解决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异常的资料请关注脚本之家其它相关文章!

相关文章

  • python二进制转换模块的具体用法

    python二进制转换模块的具体用法

    在pyton中,通过struct模块来对二进制进行转换,文中通过示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2022-01-01
  • Python 概率生成问题案例详解

    Python 概率生成问题案例详解

    这篇文章主要介绍了Python 概率生成问题案例详解,本篇文章通过简要的案例,讲解了该项技术的了解与使用,以下就是详细内容,需要的朋友可以参考下
    2021-09-09
  • 利用Python写一个爬妹子的爬虫

    利用Python写一个爬妹子的爬虫

    这篇文章主要给大家介绍了关于利用Python写一个爬妹子爬虫的相关资料,文中通过实例代码将实现的方法一步步介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2018-06-06
  • python批量连接服务器检查容器是否正常

    python批量连接服务器检查容器是否正常

    在生产中,我们可能有很多项目或者很多环境,可能会部署在几百上千的服务器里面,我们该怎么定时去监控这些服务器里面的容器服务器是否正常呢,本文就来为大家讲解
    2024-01-01
  • minpy使用GPU加速Numpy科学计算方式

    minpy使用GPU加速Numpy科学计算方式

    这篇文章主要介绍了minpy使用GPU加速Numpy科学计算方式,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2023-01-01
  • python入门之基础语法学习笔记

    python入门之基础语法学习笔记

    学习python过程中需要了解的一些基础语法特整理一下方便更开始接触python的朋友
    2020-02-02
  • PyQt5实现多张图片显示并滚动

    PyQt5实现多张图片显示并滚动

    最近要做个网页图片批量下载工具,然后需要一个页面显示网页上的所有图片供用户勾选,再根据勾选的内容来下载指定图片,其中就涉及到要到同时显示多张图片,本文就来介绍一下
    2021-06-06
  • python numpy和list查询其中某个数的个数及定位方法

    python numpy和list查询其中某个数的个数及定位方法

    今天小编就为大家分享一篇python numpy和list查询其中某个数的个数及定位方法,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2018-06-06
  • python利用后缀表达式实现计算器功能

    python利用后缀表达式实现计算器功能

    这篇文章主要为大家详细介绍了python利用后缀表达式实现计算器功能,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2021-02-02
  • Python使用logging结合decorator模式实现优化日志输出的方法

    Python使用logging结合decorator模式实现优化日志输出的方法

    这篇文章主要介绍了Python使用logging结合decorator模式实现优化日志输出的方法,实例分析了Python使用logging模块操作日志的相关技巧,需要的朋友可以参考下
    2016-04-04

最新评论