添加链接
link之家
链接快照平台
  • 输入网页链接,自动生成快照
  • 标签化管理网页链接
首页 > 脚本专栏 > python > Python中sqlalchemy数据库连接池QueuePool异常

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

作者:CXYhh121

这篇文章主要来给大家分析sqlalchemy数据库连接池QueuePool的异常,给大家用详细的图文方式做出了解决的方案,有需要的朋友可以借鉴参考下,希望可以有所帮助

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

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

SqlAlchemy QueuePool limit overflow

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

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

connection = DBSession.connection() 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 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 scatter绘制散点图
    python scatter绘制散点图
    2022-06-06
  • 使用Python轻松实现绘制词云图项目(附详细源码)
    使用Python轻松实现绘制词云图项目(附详细源码)
    2022-06-06
  • python上下文管理器协议的实现
    python上下文管理器协议的实现
    2022-06-06
  • Python+Turtle绘制蜘蛛侠的示例代码
    Python+Turtle绘制蜘蛛侠的示例代码
    2022-06-06
  • Python连接数据库并批量插入包含日期记录的操作
    Python连接数据库并批量插入包含日期记录的操作
    2022-06-06
  • Python字典查找数据的5个基础操作方法
    Python字典查找数据的5个基础操作方法
    2022-06-06
  • 利用Python操作MongoDB数据库的详细指南
    利用Python操作MongoDB数据库的详细指南
    2022-06-06
  • 一篇文章彻底搞懂Python切片操作
    一篇文章彻底搞懂Python切片操作
    2022-06-06
  • 美国设下计谋,用娘炮文化重塑日本,已影响至中国
    美国设下计谋,用娘炮文化重塑日本,已影响至中国
    2021-11-19
  • 时空伴随者是什么意思?时空伴随者介绍
    时空伴随者是什么意思?时空伴随者介绍
    2021-11-09
  • 工信部称网盘企业免费用户最低速率应满足基本下载需求,天翼云盘回应:坚决支持,始终
    工信部称网盘企业免费用户最低速率应满足基本下载需求,天翼云盘回应:坚决支持,始终
    2021-11-05
  • 2022年放假安排出炉:五一连休5天 2022年所有节日一览表
    2022年放假安排出炉:五一连休5天 2022年所有节日一览表
    2021-10-26
  • 电脑版 - 返回首页

    2006-2023 脚本之家 JB51.Net , All Rights Reserved.
    苏ICP备14036222号