返回顶部
首页 > 资讯 > 后端开发 > Python >分析解决Python中sqlalchemy数据库连接池QueuePool异常
  • 499
分享到

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

2024-04-02 19:04:59 499人浏览 薄情痞子

Python 官方文档:入门教程 => 点击学习

摘要

目录数据库相关错误的解决办法错误一:数据库连接池超过限制错误二:数据库事务未回滚数据库相关错误的解决办法 错误一:数据库连接池超过限制 sqlAlchemy QueuePool li

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

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

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异常的资料请关注编程网其它相关文章!

--结束END--

本文标题: 分析解决Python中sqlalchemy数据库连接池QueuePool异常

本文链接: https://lsjlt.com/news/136311.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

猜你喜欢
  • 分析解决Python中sqlalchemy数据库连接池QueuePool异常
    目录数据库相关错误的解决办法错误一:数据库连接池超过限制错误二:数据库事务未回滚数据库相关错误的解决办法 错误一:数据库连接池超过限制 SqlAlchemy QueuePool li...
    99+
    2024-04-02
  • golang中mysql数据库连接池的示例分析
    这篇文章主要介绍golang中mysql数据库连接池的示例分析,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!golang的优点golang是一种编译语言,可以将代码编译为机器代码,编译后的二进制文件可以直接部署到目标...
    99+
    2023-06-15
  • python数据库连接池中数据库连接池技术的优点是什么
    本篇文章给大家分享的是有关python数据库连接池中数据库连接池技术的优点是什么,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来看看吧。昨天测试了一下开500个线程去请求数据库,不过这个...
    99+
    2023-06-17
  • Express连接MySQL及数据库连接池的示例分析
    这篇文章主要介绍Express连接MySQL及数据库连接池的示例分析,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!Express连接MySQL准备工作打开webstorm新建项目选择express创建一个expres...
    99+
    2023-06-29
  • 阿里Druid数据连接池引发的线上异常解决
    目录前言过程一:定位工作流过程二:定位JPA的OpenEntityManagerInViewInterceptor过程三:定位Druid,真正的罪魁祸首后记: 前言 事件起因:项目使...
    99+
    2024-04-02
  • Python封装数据库连接池详解
    目录一、数据库封装1.1数据库基本配置1.2 编写单例模式注解1.3 构建连接池1.4 封装Python操作MYSQL的代码二、连接池测试场景一:同一个实例,执行...
    99+
    2024-04-02
  • Java操作数据库连接池实例分析
    这篇文章主要介绍“Java操作数据库连接池实例分析”,在日常操作中,相信很多人在Java操作数据库连接池实例分析问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”Java操作数据库连接池实例分析”的疑惑有所帮助!...
    99+
    2023-06-20
  • Spring myBatis数据库连接异常问题及解决
    目录spring myBatis数据库连接异常报错如下myBatis连接数据库时报错原因归纳报错信息spring myBatis数据库连接异常 报错如下 org.mybatis.sp...
    99+
    2024-04-02
  • Python 中创建 PostgreSQL 数据库连接池
    目录习惯于使用数据库之前都必须创建一个连接池,即使是单线程的应用,只要有多个方法中需用到数据库连接,建立一两个连接的也会考虑先池化他们。连接池的好处多多, 1) 如果反复创...
    99+
    2024-04-02
  • Python中怎么实现数据库连接池
    这篇文章将为大家详细讲解有关Python中怎么实现数据库连接池,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。示例:#-*-coding:utf-8-*-  import ...
    99+
    2023-06-17
  • 阿里云读取用户数据库连接异常原因分析及解决方法
    在使用阿里云数据库时,有时会遇到读取用户数据库连接异常的情况。本文将分析该问题可能的原因,并提供一些解决方案,帮助您解决该问题。详细说明:1. 问题描述:当使用阿里云数据库时,如果读取用户数据库连接出现异常,通常会出现以下错误信息:```...
    99+
    2023-12-27
    阿里 解决方法 数据库连接
  • Spring数据库连接池实现原理实例分析
    这篇“Spring数据库连接池实现原理实例分析”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇“Spring数据库连接池实现原理...
    99+
    2023-07-04
  • 由db_domain引起的数据库连接异常怎么解决
    这篇文章主要讲解了“由db_domain引起的数据库连接异常怎么解决”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“由db_domain引起的数据库连接异常怎...
    99+
    2024-04-02
  • Python中怎么创建mysql数据库连接池
    这篇文章给大家介绍Python中怎么创建mysql数据库连接池,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。安装为顶层模块 如果你打算在除了Webware之外的程序中使用,推荐安装为顶层模块:python s...
    99+
    2023-06-17
  • 在Python数据库连接池中如何创建请求连接
    在Python数据库连接池中如何创建请求连接,很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。在Python数据库连接池中操作过程中如果你设置好了连接池,你就可以按...
    99+
    2023-06-17
  • Spring数据库连接池url参数踩坑及解决
    目录Spring数据库连接池url参数踩坑遇到的问题报错情况解决修改数据库连接池的url后,还是连接原先的url问题例如Spring数据库连接池url参数踩坑 遇到的问题 报错情况...
    99+
    2024-04-02
  • Java中几种常用数据库连接池的使用
    目录一、应用程序直接获取数据库连接的缺点二、使用数据库连接池优化程序性能2.1、数据库连接池的基本概念2.2、编写数据库连接池三、开源数据库连接池3.1、DBCP数据源3.2、在应用...
    99+
    2024-04-02
  • Jdbc连接常见数据库的示例分析
    Jdbc连接常见数据库的示例分析,针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。1.Jdbc连接Access数据库①通过控制面板>&g...
    99+
    2024-04-02
  • Python实现Mysql数据库连接池实例详解
    python连接Mysql数据库: Python编程中可以使用MySQLdb进行数据库的连接及诸如查询/插入/更新等操作,但是每次连接MySQL数据库请求时,都是独立的去请求访问,相当浪费资源,而且访问数...
    99+
    2022-06-04
    详解 实例 数据库
  • 掌握数据库连接池秘籍,解决数据库性能瓶颈!
    数据库连接池的概念 数据库连接池是一种缓存机制,用于管理和复用数据库连接。其原理是预先创建一组数据库连接并存储在池中,当应用程序需要连接数据库时,它可以从连接池中获取一个可用连接,而不是直接创建新的连接。释放连接时,连接将被放回池中,而...
    99+
    2024-03-03
    数据库连接池、性能优化、连接管理、连接泄漏、资源管理
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作