运行SQL';杀死';来自Python

运行SQL';杀死';来自Python,python,sql-server,Python,Sql Server,我总是通过pymssql从Python上的SQL数据库检索数据,这可能会导致太多空闲连接。因此,我编写了一个SQL过程来消除空闲连接,当我在SSM上执行时,它就会工作。但是,当我尝试在python上执行它时,它失败并引发: (6115,b'KILL命令不能在user transactions.DB-Lib内使用 错误消息20018,严重性16:\n一般SQL Server错误:检查 来自SQL Server的消息\n') 下面的代码是从python执行SQL过程的方法 import pymssq

我总是通过pymssql从Python上的SQL数据库检索数据,这可能会导致太多空闲连接。因此,我编写了一个SQL过程来消除空闲连接,当我在SSM上执行时,它就会工作。但是,当我尝试在python上执行它时,它失败并引发:

(6115,b'KILL命令不能在user transactions.DB-Lib内使用 错误消息20018,严重性16:\n一般SQL Server错误:检查 来自SQL Server的消息\n')

下面的代码是从python执行SQL过程的方法

import pymssql

conn = pymssql.connect(server, username, password, dbname)
cursor = conn.cursor()

cursor.execute("exec killconn")
我该怎么处理


非常感谢。

这可能不是空闲连接这一根本问题的解决方案,但SQL server的错误是由pymssql在默认情况下将每个连接包装到事务中引起的。KILL之类的命令不能在事务内部运行,因此如果以这种方式调用,则会失败

为了防止pymssql或其他python数据库连接添加此事务,可以将autocommit设置为True

由于它是一个被调用的存储过程,
callproc()
可能比
execute()
更合适

导入pymssql
conn=pymssql.connect(服务器、用户名、密码、数据库名)
conn.autocommit(正确)
游标=连接游标()
cursor.callproc(“killconn”)

这是我发现的一个案例,但我仍然不知道如何处理它。在黑暗中拍摄(可能未命中)这难道不是连接对象的权限升级,因此不允许吗?或者您在这两个位置使用相同的用户名/密码?为什么您的程序不关闭并破坏其连接?解决根本原因,而不是症状。@scsimon是的,这是一种方法。谢谢你,@alroc说了什么。通过关闭和处理连接对象来修复糟糕的代码,问题将不再困扰您。