如果我想撤消在SQLAlchemy会话中使用session.execute(my_update_sql)
语句执行的先前更新语句,我该如何处理它?</ p>
我在Pyramid web应用程序中使用SQLAlchemy,Zope
答案 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,