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

时间:2015-06-09 05:28:58

标签: sqlalchemy pyramid zope

如果我想撤消在SQLAlchemy会话中使用session.execute(my_update_sql)语句执行的先前更新语句,我该如何处理它?<​​/ p>

我在Pyramid web应用程序中使用SQLAlchemy,Zope

1 个答案:

答案 0 :(得分:2)

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

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

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

import transaction
transaction.rollback()

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