如何在MySQL中关闭sqlalchemy连接

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

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连接 的全部内容, 来源链接: utcz.com/qa/430129.html

回到顶部