sqlalchemy 关闭所有连接

Eug*_*ene 7 python sqlalchemy

我正在尝试使用 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
Run Code Online (Sandbox Code Playgroud)

我用以下方法创建引擎:

sqlalchemy.create_engine(connection_string, poolclass = NullPool)
Run Code Online (Sandbox Code Playgroud)

但我收到以下错误:

详细 ProgrammingError: (ProgrammingError) ('42000', '[42000] [Microsoft][ODBC SQL Server Driver][SQL Server]无法删除数据库“test_db”,因为它当前正在使用中。(3702) (SQLExecDirectW)') '删除数据库 test_db'()

如何强制关闭所有连接?

Mat*_*Cox 6

使用 SQLAlchemy 会话 API 关闭所有连接的当前方法是

from sqlalchemy.orm import close_all_sessions

close_all_sessions()
Run Code Online (Sandbox Code Playgroud)

正如session.close_all()已弃用的那样。

  • 从技术上讲,关闭会话只是将连接检查回池中。您需要调用“engine.dispose()”来关闭连接 - [Engine Disposal](https://docs.sqlalchemy.org/en/20/core/connections.html#engine-disposal)。 (2认同)