Python SQLAlchemy engine.execute()使到数据库的连接保持休眠状态
我正在使用SQL server数据库。我注意到,在执行下面的代码时,我得到了一个到数据库的连接,该数据库处于“休眠”状态,状态为“等待命令”Python SQLAlchemy engine.execute()使到数据库的连接保持休眠状态,python,sql-server,sqlalchemy,pymssql,Python,Sql Server,Sqlalchemy,Pymssql,我正在使用SQL server数据库。我注意到,在执行下面的代码时,我得到了一个到数据库的连接,该数据库处于“休眠”状态,状态为“等待命令” engine = create_engine(url, connect_args={'autocommit': True}) res = engine.execute(f"CREATE DATABASE my_database") res.close() engine.dispose() 在engine.dispose调用
engine = create_engine(url, connect_args={'autocommit': True})
res = engine.execute(f"CREATE DATABASE my_database")
res.close()
engine.dispose()
在engine.dispose调用之后有一个断点,我可以在EXEC sp_who2表中看到服务器上的一个条目。只有在我终止进程后,此条目才会消失。可能
连接池
连接池是用于
在内存中维护长时间运行的连接,以便高效地重复使用,如有必要
以及提供连接总数的管理
应用程序可能同时使用
特别是对于服务器端web应用程序,连接池非常重要
维护活动数据库连接“池”的标准方法
在内存中,可跨请求重用
SQLAlchemy包括几个连接池实现
与发动机集成。它们也可以直接用于
希望将池添加到其他普通DBAPI的应用程序
接近
我不确定这是否是我删除数据库的方法的障碍
要删除可能正在使用的数据库,请尝试:
USE master;
ALTER DATABASE mydb SET RESTRiCTED_USER WITH ROLLBACK IMMEDIATE;
DROP DATABASE mydb;
基本上,您希望杀死所有可以使用的连接,如下所示: 适用于MS SQL Server 2012及以上版本
USE [master];
DECLARE @kill varchar(8000) = '';
SELECT @kill = @kill + 'kill ' + CONVERT(varchar(5), session_id) + ';'
FROM sys.dm_exec_sessions
WHERE database_id = db_id('MyDB')
EXEC(@kill);
适用于MS SQL Server 2000、2005、2008
USE master;
DECLARE @kill varchar(8000); SET @kill = '';
SELECT @kill = @kill + 'kill ' + CONVERT(varchar(5), spid) + ';'
FROM master..sysprocesses
WHERE dbid = db_id('MyDB')
EXEC(@kill);
或者更像脚本:
DECLARE @pid SMALLINT, @sql NVARCHAR(100)
DECLARE curs CURSOR LOCAL FORWARD_ONLY FOR
SELECT DISTINCT pid FROM master..sysprocesses where dbid = DB_ID(@dbname)
OPEN curs
fetch next from curs into @pid
while @@FETCH_STATUS = 0
BEGIN
SET @sql = 'KILL ' + CONVERT(VARCHAR, @pid)
EXEC(@sql)
FETCH NEXT FROM curs into @pid
END
CLOSE curs
DEALLOCATE curs
更多信息可在此处找到:
是的,我不确定这是否是我删除数据库的拆卸方法的障碍-我得到数据库正在使用错误,我假设是来自池的休眠连接。我不确定我是否能把这些时间定下来。