我总是通过pymssql从Python上的SQL数据库中检索数据,这可能导致太多的空闲连接。因此,我编写了一个SQL程序来杀死空闲连接,它在我在SSMS上执行时起作用。但是,当我尝试在python上执行它时,它会失败并引发:
(6115,b'KILL命令不能在用户事务中使用.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")
我该如何处理?
非常感谢你。
答案 0 :(得分:0)
这可能不是解决空闲连接的根本问题的方法,但是SQL Server的错误是由pymssql默认将每个连接包装在事务中引起的。诸如KILL之类的命令无法在事务内运行,因此如果以这种方式调用将失败。
要防止pymssql或其他python数据库连接添加此事务,可以将 autocommit 设置为True。
由于它是存储过程,因此callproc()
比execute()
更合适。
import pymssql
conn = pymssql.connect(server, username, password, dbname)
conn.autocommit(True)
cursor = conn.cursor()
cursor.callproc("killconn")