在开启事务时,使用SET TRANSACTION ISOLATION LEVEL SERIALIZABLE;语句来设置事务的隔离级别为串行化隔离级别,该隔离级别最大程度地保障并发事务的正确性,但付出了相应的额外开销。
示例代码:
import psycopg2
conn = psycopg2.connect("dbname=test user=postgres password=123456 host=localhost port=5432")
cur = conn.cursor()
# 开启事务,并设置隔离级别为串行化隔离级别
cur.execute("SET TRANSACTION ISOLATION LEVEL SERIALIZABLE;")
cur.execute("BEGIN;")
try:
cur.execute("UPDATE account SET balance = balance - 100 WHERE id = 1;")
cur.execute("UPDATE account SET balance = balance + 100 WHERE id = 2;")
except Exception as e:
print(e)
conn.rollback()
conn.commit()