使用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
相关产品推荐
相关产品推荐

