如何为 pyodbc 错误 40001 添加错误处理到 Python 脚本?

问题描述 投票:0回答:1

我有下面的 Python 脚本,用于更新数据库中的记录。

connectionString = f'DRIVER={{ODBC Driver 18 for SQL Server}};SERVER={SERVER};DATABASE={DATABASE};UID={USERNAME};PWD={PASSWORD}'
conn = pyodbc.connect(connectionString)
cursor = conn.cursor()
cursor.execute(f'UPDATE MYTABLE SET LastName = 'TestLName', FirstName = 'TestFName' WHERE ID = 1')
conn.commit()
conn.close()

有时,我会遇到以下错误。

pyodbc.Error: ('40001', '[40001] [Microsoft][ODBC Driver 17 for SQL Server][SQL Server]Transaction (Process ID 97) was deadlocked on lock resources with another process and has been chosen as the deadlock victim. Rerun the transaction. (1205) (SQLExecDirectW)')

如何向脚本添加错误处理,以便在发生错误时重试更新数据库?

python python-3.x pyodbc pypyodbc
1个回答
0
投票

尝试:

import pyodbc
import time

def update_database():
    connectionString = f'DRIVER={{ODBC Driver 18 for SQL Server}};SERVER={SERVER};DATABASE={DATABASE};UID={USERNAME};PWD={PASSWORD}'
    conn = pyodbc.connect(connectionString)
    cursor = conn.cursor()
    try:
        cursor.execute(f"UPDATE MYTABLE SET LastName = 'TestLName', FirstName = 'TestFName' WHERE ID = 1")
        conn.commit()
    except pyodbc.Error as ex:
        sqlstate = ex.args[0]
        if sqlstate == '40001':  # Deadlock error
            print("Deadlock detected. Retrying...")
            time.sleep(1)  # Add a delay to avoid immediate retries
            update_database()  # Retry the update
        else:
            # Handle other exceptions
            print("Error:", ex)
    finally:
        conn.close()

update_database()
最新问题
© www.soinside.com 2019 - 2025. All rights reserved.