我们陷入僵局,失去了与我们的一些数据挖掘工作的联系。我们想要抓住Python pymssql模块因死锁而失败的问题。
DateTimeIterable dti = DateTimeIteratorFactory.createDateTimeIterable(RRULE, DTSTART, dateTimeZone, true);
我们尝试在try / except中包装我们的CURSOR.EXECUTE语句,但它不会触发。
File "pymssql.pyx", line 465, in pymssql.Cursor.execute (pymssql.c:6572)
OperationalError: (1205, 'Transaction (Process ID 113) was deadlocked on lock resources with another process and has been chosen as the deadlock victim. Rerun the transaction.DB-Lib error message 20018, severity 13:\nGeneral SQL Server error: Check messages from the SQL Server\n')
我们看到other examples在那些代码似乎正在陷入僵局的人身上,所以我们不确定为什么我们没有捕获。
如何解决这个僵局的任何建议?
当系统出现故障时,能够发出扩音器或其他警报来告诉我们,这将是非常棒的。
答案 0 :(得分:0)
我认为是:
try:
CURSOR.execute(query)
except pymssql.InterfaceError as e:
print "SQL Interface Error: "+str(e)
但是我还在等待发生死锁的情况,所以我不确定:)无论如何,下面将处理所有pymssql错误,包括1205死锁:
try:
CURSOR.execute(query)
except pymssql.Error as e:
print "SQL Error: "+str(e)
答案 1 :(得分:0)
也许您需要捕获OperationalError。
exception pymssql.OperationalError
引发与数据库操作相关的错误,而不是 必须在程序员的控制下,例如意外 发生断开连接,找不到数据源名称,一个事务 无法处理,期间发生内存分配错误 处理等.DataError的子类。
try:
CURSOR.execute(query)
except OperationalError as e:
print "OperationalError : {0}".format(e)