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

psycopg2操作Postgres:fetchall正常但execute执行DROP表不生效

核心原因

psycopg2 默认关闭自动提交机制,连接建立后会开启一个隐式事务:

  • 你执行的SELECT属于读操作,不需要事务提交就能正常返回结果,所以看起来运行正常
  • DROP TABLE属于数据库结构变更的DDL语句,执行后必须手动提交事务,改动才会持久化到数据库;如果没有主动提交,连接断开时整个事务会自动回滚,删表操作自然不会生效。
修复方案

两种方案二选一即可:

  • 执行完删表逻辑后手动提交事务
# 原有查询逻辑不变
cur.execute("DROP TABLE IF EXISTS test.ws_sites")
# 新增事务提交逻辑,这是删表生效的关键
conn.commit()

# 操作完成后记得关闭游标和连接
cur.close()
conn.close()
  • 初始化连接后直接开启自动提交,后续所有写操作、DDL操作无需手动提交就会生效
conn = psycopg2.connect(
    host="test.postgres.database.azure.com",
    database="postgres",
    user="test",
    password="test"
)
# 开启自动提交
conn.autocommit = True
cur = conn.cursor()

补充排查点:如果加了提交后还是删表失败,优先检查连接使用的账号是否有对应schema下的删表权限、目标表是否被其他活跃会话加了锁阻塞操作。

内容的提问来源于stack exchange,提问作者S.Perera

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.29 06:54:28