【问题标题】:How do I revert / undo a `session.execute()` statement in SQLAlchemy如何在 SQLAlchemy 中恢复/撤消 `session.execute()` 语句
【发布时间】:2015-08-23 18:37:28
【问题描述】:

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

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

【问题讨论】:

  • 你为什么需要那个?你的用例是什么?
  • 如果session.execute没有提交,那么你可以session.rollback
  • 我虽然 session.execute 总是提交,不是这样吗?

标签: sqlalchemy pyramid zope


【解决方案1】:

如果您对事务使用“真正的”DBMS,您应该能够回滚当前事务,就像您对涉及session 的其他操作所做的那样:

session.execute('DELETE FROM users')  # feel the thrill!
session.rollback()

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

import transaction
transaction.rollback()

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

【讨论】:

    猜你喜欢
    • 2017-11-07
    • 2021-02-12
    • 1970-01-01
    • 1970-01-01
    • 2014-12-08
    • 2021-02-17
    • 1970-01-01
    • 1970-01-01
    • 2011-02-24
    相关资源
    最近更新 更多