在pymssql中重复死锁查询后更新失败

时间:2014-05-19 23:13:18

标签: python sql sql-server deadlock pymssql

我正在使用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没有达到死锁条件时,它工作正常,所以我认为这与从该错误中恢复有关。

有什么想法吗?

0 个答案:

没有答案