SQLAlchemy关闭所有连接

7

我正在尝试使用SQLAlchemy删除我的数据库:

def dropDb(self, dbName):
    self.closeConnection()
    self.selectDb(None)
    self.execute("drop database %s" % dbName)

def closeConnection(self):
    self._Session.close_all()
    self._engine.dispose()
    del self._Session
    del self._engine

我使用以下方式创建引擎:

sqlalchemy.create_engine(connection_string, poolclass = NullPool)

但我遇到了以下错误:

详细的ProgrammingError: (ProgrammingError) ('42000', '[42000] [Microsoft][ODBC SQL Server Driver][SQL Server]Cannot drop database "test_db" because it is currently in use. (3702) (SQLExecDirectW)') 'drop database test_db' ()

如何强制关闭所有连接?


我相信这个问题的答案是你所需要的。 - KobeJohn
2
我之前也遇到了类似的问题,解决方法是添加了你在问题中提到的 session.close_all()!再加上 engine.dispose() 就解决了我的问题。 - simlmx
1个回答

6
使用SQLAlchemy会话API关闭所有连接的当前方法是close_all_sessions方法。
from sqlalchemy.orm import close_all_sessions

close_all_sessions()

因为 session.close_all() 已经被弃用。


1
从技术上讲,关闭会话只是将连接放回连接池中。要关闭连接,您需要调用engine.dispose()方法 - 引擎释放 - snakecharmerb

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接