如何用Python的psycopg2实现事务暂停检查后提交或回滚?
在psycopg2中模拟手动检查事务后提交/回滚的流程
psycopg2默认关闭自动提交(autocommit),连接建立后会自动开启一个事务,所有操作都会在这个事务中执行,直到显式调用commit()或rollback(),和你用纯SQL执行begin;的逻辑完全一致。
要实现脚本暂停、手动检查后再决定提交/回滚的流程,按以下步骤操作:
1. 基础实现代码
import psycopg2 # 建立数据库连接(默认autocommit为False,自动开启事务) conn = psycopg2.connect( dbname="你的数据库名", user="你的用户名", password="你的密码", host="你的数据库地址" ) cur = conn.cursor() # 执行你的数据库操作(比如插入、更新、删除) cur.execute("INSERT INTO example_table (name) VALUES ('测试数据');") # 暂停脚本,等待手动检查 input("操作已执行,请手动检查数据库。按Enter继续下一步...") # 根据输入决定提交或回滚 choice = input("请输入 commit 提交或 rollback 回滚:").strip().lower() if choice == "commit": conn.commit() print("事务已提交") elif choice == "rollback": conn.rollback() print("事务已回滚") else: print("输入无效,默认回滚事务") conn.rollback() # 清理资源 cur.close() conn.close()
2. 关键注意事项
默认情况下,PostgreSQL的事务隔离级别是READ COMMITTED,其他数据库会话(比如你手动打开的psql客户端)无法看到未提交的更改。如果要在其他会话中查看未提交的数据,需要在该会话中设置隔离级别为READ UNCOMMITTED:
BEGIN TRANSACTION ISOLATION LEVEL READ UNCOMMITTED; SELECT * FROM example_table; -- 此时能看到未提交的脏数据 -- 检查完成后可回滚该检查事务 ROLLBACK;
3. 可选:在脚本内直接查看数据
如果不需要切换到其他客户端,也可以在暂停前直接在脚本中查询并打印当前事务内的数据:
# 执行操作后,在脚本内查询 cur.execute("SELECT * FROM example_table WHERE name = '测试数据';") print("当前事务中的数据:", cur.fetchall()) # 再暂停等待手动确认 input("按Enter继续...")
内容的提问来源于stack exchange,提问作者sam
相关产品推荐
相关产品推荐

