我有下面的 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)')
如何向脚本添加错误处理,以便在发生错误时重试更新数据库?
尝试:
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()