如何在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发现“连接太多”错误?
我已经知道我可以处理连接,否则有一个连接池。我只想了解如何正确关闭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()

也就是说,引擎是一个连接工厂,也是连接池,而不是连接本身。当你说conn.close()时,连接将返回到Engine中的连接池,实际上并不关闭。

如果您确实希望连接实际上关闭,也就是说,不是池,禁用通过NullPool池:

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

使用以上引擎配置,每次调用conn.close()将关闭底层DBAPI连接。

如果OTOH实际上想连接到每个调用的不同数据库,那就是硬编码的“localhost / test_database”只是一个例子,实际上有很多不同的数据库,那么使用dispose()的方法是正常的;它将关闭从池中未检出的每个连接。

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

翻译自:https://stackoverflow.com/questions/8645250/how-to-close-sqlalchemy-connection-in-mysql

转载注明原文:如何在MySQL中关闭sqlalchemy连接