我将 SQL Server 与 pymssql 一起使用,发现一个特别复杂的 SELECT 查询偶尔会被选为死锁受害者。因此,我将其包装在 while 循环中,以便在发生这种情况时重试事务,大致如下:
while True:
try:
cursor.execute('SELECT .......')
count_row = cursor.fetchone();
break
except Exception, tec:
print "Got error: %s" % (tec)
time.sleep(1)
cursor.execute('UPDATE .........')
self.conn.commit()
它似乎有效 - 如果 SELECT 遇到死锁,那么它将暂停一秒钟,重试并获得正确的答案。然而,每次发生以下 UPDATE 语句总是失败:
pymssql.OperationalError: Cannot commit transaction: (3902, 'The COMMIT TRANSACTION request has no corresponding BEGIN TRANSACTION.DB-Lib error message 3902, severity 16:\nGeneral SQL Server error: Check messages from the SQL Server\n')
UPDATE 语句不在 while 循环中,所以我不知道它为什么失败。当 SELECT 没有达到死锁条件时它工作正常,所以我认为这与从该错误中恢复有关。
有任何想法吗?
None
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)