如何在 SQLAlchemy 中恢复/撤消 `session.execute()` 语句

How do I revert / undo a `session.execute()` statement in SQLAlchemy

如果我想撤消之前在 SQLAlchemy 会话中使用 session.execute(my_update_sql) 语句执行的更新语句,我该怎么做?

我在 Pyramid 网络应用程序中使用 SQLAlchemy、Zope

如果您使用 "real" DBMS 处理事务,您应该能够回滚当前事务,就像处理涉及 session:

的其他操作一样
session.execute('DELETE FROM users')  # feel the thrill!
session.rollback()

带有 Pyramid 的 SQLAlchemy 的典型设置涉及 ZopeTransactionExtension,它将会话管理与 Pyramid 的请求-响应周期集成在一起。在这种情况下,要回滚事务,您需要使用 ZTE 的事务管理器来执行此操作:

import transaction
transaction.rollback()

请注意,回滚事务将撤消事务中所做的所有更改,而不仅仅是您的 session.execute() 语句。如果您只想 "undo" 一个语句,您可以尝试使用 SQLAlchemy 的 nested transactions,支持取决于您使用的 DBMS,