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

如何在MySQL中关闭sqlalchemy连接

张姚石
2023-03-14
问题内容

这是我要运行的示例代码:

for i in range(1,2000):
    db = create_engine('mysql://root@localhost/test_database')
    conn = db.connect()
    #some simple data operations
    conn.close()
    db.dispose()

有没有一种方法可以运行此方法而又不会从MySQL收到“ Too many
connections”错误?我已经知道我可以以其他方式处理连接或拥有连接池。我只想了解如何正确关闭sqlalchemy的连接。提前致谢!


问题答案:

这是正确编写该代码的方法:

db = create_engine('mysql://root@localhost/test_database')
for i in range(1,2000):
    conn = db.connect()
    #some simple data operations
    conn.close()
db.dispose()

也就是说,Engine是连接 工厂 和连接 ,而不是连接本身。当您说时conn.close(),连接将 返回到Engine内的连接池
,而实际上并未关闭。

如果确实要关闭连接,即不进行池化,请通过NullPool以下方式禁用池化:

from sqlalchemy.pool import NullPool
db = create_engine('mysql://root@localhost/test_database', poolclass=NullPool)

使用上述Engine配置,每次调用conn.close()都会关闭基础DBAPI连接。

如果OTOH您实际上希望在每次调用时连接到 不同的
数据库,也就是说,您的硬编码"localhost/test_database"只是一个示例,并且您实际上有很多不同的数据库,则使用的方法dispose()很好;它将关闭所有未从池中检出的连接。

在上述所有情况下,重要的是该Connection对象是通过关闭的close()。如果您使用的是任何类型的“无连接”执行,即engine.execute()statement.execute(),则ResultProxy应该完全读取从该execute调用返回的对象,或者通过显式关闭该对象close()。一个ConnectionResultProxy这仍然开放将禁止NullPooldispose()从关闭每一个最后的连接方法。



 类似资料:
  • 问题内容: 遵循我们在如何在MySQL中关闭sqlalchemy连接中的注释之后,我正在检查SQLAlchemy创建到数据库中的连接,如果不退出Python,我将无法关闭它们。 如果我在python控制台中运行此代码,它将保持会话打开状态,直到我退出python为止: 我发现要关闭它的唯一解决方法是在最后调用。 根据我上面给出的链接中的评论,我的问题现在是: 为什么需要关闭会议? 还不够吗 问题答

  • 刚才发现每次调用完接口都有一堆连接没关掉( 如下图 ): 于是写了一段本地代码无限循环跑发现单独执行一次是可以立刻关闭连接的即便循环跑也一直是 10-30 来回跳我估计就是每次循环好就关闭了问题不大( 代码如下 ): 但是我的 flask 应用中每次请求完连接都在一直没搞懂什么问题( 代码如下 ): 请求指点分析什么问题

  • 问题内容: 明智地关闭mysql连接效率是否至关重要,还是在php文件运行后自动关闭? 问题答案: 从文档中: 注意:脚本执行结束后,将立即关闭到服务器的链接,除非更早地通过显式调用mysql_close()关闭了该链接。 如果您的脚本在提取结果后要执行大量处理,并且已检索到完整的结果集,则绝对应该关闭连接。如果您不这样做,那么当Web服务器使用率过高时,MySQL服务器就有可能达到其连接限制。如

  • 问题内容: Java什么时候放开与URL的连接?我在URL或URLConnection上都没有看到close()方法,所以一旦请求完成,它会释放连接吗?我主要是询问是否需要在异常处理程序中进行任何清理。 问题答案: 它取决于协议中指定的特定协议。有些维护持久连接,而另一些则在您的呼叫在连接给定的输入或输出流中关闭时关闭其连接。但是除了记住关闭从URLConnection打开的流之外,您无能为力。

  • 问题内容: 我正在尝试进行AJAX调用(通过JQuery),这将启动一个相当长的过程。我希望脚本仅发送一个指示进程已开始的响应,但是JQuery在PHP脚本运行完成之前不会返回响应。 我已经尝试过使用“关闭”标头(如下),以及输出缓冲了。似乎都不起作用。有什么猜想吗?还是我需要在JQuery中做这件事? 问题答案: 以下PHP手册页(包括用户注释)建议了有关如何在不结束PHP脚本的情况下关闭与浏览

  • 我编写了以下代码来连接到Oracle数据库。这用于REST API。我正在连接的数据库的IDLE_TIME参数设置为30分钟(这不能更改)。如果数据库连接空闲超过30分钟,则会抛出以下错误:“java.sql.SQLRecoverableException: ClosedConnection”。抛出此错误后,API将停止工作。我如何解决这个问题?