2015-06-09 38 views
2

如果我想撤消在SQLAlchemy會話中使用session.execute(my_update_sql)語句執行的先前更新語句,我該如何解決這個問題?如何在SQLAlchemy會話中恢復/撤消`session.execute()`語句

我使用的SQLAlchemy,Zope的一個金字塔的Web應用程序

+0

你爲什麼要這麼做?你的用例是什麼? – matino

+0

如果'session.execute'沒有提交,那麼你可以'session.rollback' – adarsh

+0

雖然'session.execute'總是提交,是不是這種情況? – matino

回答

2

,只要您使用與交易「真正的」 DBMS,你應該可以回滾當前事務,就像你與其他操作做涉及session

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

的SQLAlchemy的典型設置與金字塔涉及ZopeTransactionExtension,它的會話管理金字塔的請求 - 響應週期的集成。在這種情況下,回滾,你需要在使用中興通訊的事務管理器做交易:

import transaction 
transaction.rollback() 

注意,回滾事務將撤銷在事務中所做的所有更改,不只是你session.execute()聲明。如果你只想「撤銷」一條語句,你可以嘗試使用SQLAlchemy的nested transactions,支持取決於你正在使用的DBMS,