从Python运行SQL'Kill'

时间:2017-04-20 20:33:49

标签: python sql-server

我总是通过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")

我该如何处理?

非常感谢你。

1 个答案:

答案 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")