You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.26 05:00:16