当前位置: 首页 > 面试题库 >

如何关闭SQLAlchemy会话?

夏炎彬
2023-03-14
问题内容

遵循我们在如何在MySQL中关闭sqlalchemy连接中的注释之后,我正在检查SQLAlchemy创建到数据库中的连接,如果不退出Python,我将无法关闭它们。

如果我在python控制台中运行此代码,它将保持会话打开状态,直到我退出python为止:

from sqlalchemy.orm import sessionmaker
from models import OneTable, get_engine

engine = get_engine(database="mydb")
session = sessionmaker(bind=engine)()

results = session.query(OneTable.company_name).all()

# some work with the data #

session.close()

我发现要关闭它的唯一解决方法engine.dispose()在最后调用。

根据我上面给出的链接中的评论,我的问题现在是:

  • 为什么engine.dispose()需要关闭会议?
  • session.close()不够吗

问题答案:

对于“会话”一词,这里有一个主要的困惑。我不确定在这里,但似乎您可能将SQLAlchemy会话与MySQL
@@ session
混淆了,后者指的是第一次连接MySQL以及断开连接时的范围。

这两个概念 并不相同 。SQLAlchemy会话通常表示特定数据库连接后 一个或多个事务 的范围。

因此,从字面上看,您的问题的答案是调用session.close(),即“如何正确关闭SQLAlchemy会话”。

但是,问题的其余部分表明您需要某种功能,即当Session关闭特定功能时,您也希望关闭实际的DBAPI连接。

这基本上意味着您希望禁用连接池。正如其他答案所提到的那样,很容易使用NullPool。



 类似资料:
  • 问题内容: 这是我要运行的示例代码: 有没有一种方法可以运行此方法而又不会从MySQL收到“ Too many connections”错误?我已经知道我可以以其他方式处理连接或拥有连接池。我只想了解如何正确关闭sqlalchemy的连接。提前致谢! 问题答案: 这是正确编写该代码的方法: 也就是说,是连接 工厂 和连接 池 ,而不是连接本身。当您说时,连接将 返回到Engine内的连接池 ,而实

  • 我正在使用spring 4+Websockets+Stomp JS库。我找不到任何方法来设置websocket ping/pong机制(心跳)。 null 因此,我正在实现自己的乒乓消息机制。 这里的任务之一-实现服务器端关闭websocket,以防在超过10秒的时间内没有来自客户端的ping消息。 使用spring WebSockets是没有办法做到这一点的! 也许有人能告诉我如何通过sprin

  • 我正在使用ActiveMQ对电子邮件进行排队,消费者读取队列并发送电子邮件。 在启动时,我注册一个生产者,并永远缓存它。 有时,当连接关闭时,生产者无法将消息加入队列。 有人能告诉我处理闭门会议的最佳方式吗?我应该重新注册我的制作人吗?还是有办法重开会话?

  • 我使用hibernate并尝试优化加载带注释的外部实体 我不想在hibernate查询期间检索外部实体并使用延迟获取类型。稍后(会话已经关闭之后),我想获取那个外部实体,但使用的工具不同于hibernate(另一个缓存的DAO(GuavaCache),它已经存储了外部实体)。 当然,我立即得到了一个LazyLaunalizationException。 我不能用@Transient替换@ManyT

  • 我有下面的方法,每隔几秒钟插入一大批记录。运行一段时间后,我得到如下错误: 错误:通信链接失败 从服务器成功接收的最后一个数据包是523毫秒前。上次成功发送到服务器的数据包是8毫秒前。 May 16, 2013 9:48:30 AM com.mchange.v2.c3p0.stmt.GooGooStatementCache checkinStatement INFO: 签入语句问题,丢弃。 com

  • 问题内容: 我最近开始在应用程序中使用hibernate和c3p0作为ORM。但是,当我关闭会话工厂时,连接池不会自行关闭!这是我的应用程序中 唯一 可以进行会话操作的地方。 这是我的配置文件 请注意,空闲连接非常短的原因是它是我尚未通过集成测试的唯一方法。他们经常打开和关闭会话工厂,因此我总是用尽所有连接。正如我们在项目开始时一样,从长远来看,我认为这不是一个非常可持续的策略。 需要注意的“有趣