这是正确编写该代码的方法:
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 NullPooldb = 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()。一个
Connection或
ResultProxy这仍然开放将禁止
NullPool或
dispose()从关闭每一个最后的连接方法。



