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

使用Python SQLAlchemy删除Oracle表记录失败排查

解决Oracle中SQLAlchemy执行DELETE无报错但未删记录的问题

你遇到的核心问题是事务未提交——SQLAlchemy连接Oracle时,默认会开启事务,执行完DELETE语句后如果不主动提交,事务会自动回滚,导致记录看起来没被删除。

先看你用到的代码:

sql = "DELETE FROM table WHERE id=1"
engine.connect().execute(text(sql))

两种解决办法

1. 手动提交事务

显式打开连接,执行语句后提交,最后关闭连接:

from sqlalchemy import text

sql = "DELETE FROM table WHERE id=1"
conn = engine.connect()
try:
    conn.execute(text(sql))
    conn.commit()  # 关键:提交事务
finally:
    conn.close()

2. 用上下文管理器(推荐)

上下文管理器会自动处理连接的关闭,你只需要在块内提交事务:

from sqlalchemy import text

sql = "DELETE FROM table WHERE id=1"
with engine.connect() as conn:
    conn.execute(text(sql))
    conn.commit()

额外排查点

如果提交后还是没删,再检查这几个地方:

  • 确认表中确实存在id=1的记录
  • 确认执行代码的数据库账号有该表的DELETE权限
  • 检查表是否有触发器(比如INSTEAD OF触发器)拦截了删除操作
  • 核对表名是否正确:Oracle默认表名是大写,如果你代码里写的是小写且没加双引号,可能实际操作的是另一个表

内容的提问来源于stack exchange,提问作者hootowl

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.22 07:29:57