sqlalchemy The transaction is active - has not been committed or rolled back.

连接池参考

参考:https://blog.csdn.net/SunJW_2017/article/details/129332393

1、因为使用了连接池,没有释放

2、解决方法:

from sqlalchemy import create_engine
from sqlalchemy.orm import sessionmaker, scoped_session
from greenlet import getcurrent as get_ident


class Service(object):
    def __init__(self):
        from common import con_sql

        self.engine = create_engine(
            con_sql,
            echo=true,  # 显示SQL
            # poolclass=NullPool,  # 不使用连接池
            pool_size=5,  # 连接池大小
            max_overflow=5,  # 允许增加连接数
            pool_pre_ping=True,  # 在每次使用连接进行数据库操作前,先检验一下连接是否有效。有效就直接使用;无效则重新连接
            pool_recycle=7200  # 多久之后对线程池中的线程进行一次连接的回收(重置),单位(秒)
        )

        self.session_factory = sessionmaker(bind=self.engine)
        self.db_session = scoped_session(self.session_factory, get_ident)

    def __del__(self):
        self.dispose()

    def dispose(self):
        try:
            if self.db_session:
                self.db_session.remove()
                self.db_session.close()
                self.db_session = None
            if self.session_factory:
                self.session_factory = None
            if self.engine:
                self.engine.dispose()
                self.engine = None
        except Exception as _ex:
            pass
相关推荐
liynet2 分钟前
Goland项目内引入字符串标红的解决办法
java·服务器·前端
alden_ygq6 分钟前
Go os/exec 使用实践
开发语言·数据库·golang
互联网杂货铺8 分钟前
接口测试自动化实战(超详细的)
自动化测试·软件测试·python·测试工具·职场和发展·测试用例·接口测试
龙少95438 分钟前
【UNION与UNION ALL的区别?】
数据库
放下华子我只抽RuiKe513 分钟前
Vue进阶之旅:组件通信与高级用法深度剖析(组件通信&进阶用法)
前端·javascript·vue.js·前端框架·node.js·json·html5
处女座_三月20 分钟前
使用QQ登录(头条项目-09)
android·python·django
程序员陆通26 分钟前
使用 Python 开发一个 AI Agent 自媒体助手示例
人工智能·python·媒体
最好Tony30 分钟前
python编程-OpenCV(图像读写-图像处理-图像滤波-角点检测-边缘检测)角点检测
图像处理·python·opencv
菜鸟阿康学习编程37 分钟前
JDBC 实战项目(增删改查小系统,接近完美!)017
java·开发语言·数据库
zhangfeng113338 分钟前
python mysql库的三个库mysqlclient mysql-connector-python pymysql如何选择,他们之间的区别
数据库·python·mysql