2015-06-09 7 views
2

Если я хотел бы отменить предыдущий оператор обновления, выполненный с помощью инструкции на сеансе SQLAlchemy, как мне это сделать?Как мне отменить/отменить инструкцию `session.execute()` в SQLAlchemy

Я использую SQLAlchemy, Zope в вебе-приложении Pyramid

+0

Зачем вам это нужно? Каков ваш прецедент? – matino

+0

Если 'session.execute' не совершил, то вы можете' session.rollback' – adarsh

+0

Я, хотя 'session.execute' всегда фиксирует, не так ли? – matino

ответ

2

При условии, что вы используете «реальный» СУБД с транзакциями, вы должны быть в состоянии выполнить откат текущей транзакции, так же, как вы могли бы сделать с другими операциями с участием session:

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

типичная установка SQLAlchemy с пирамидой включает ZopeTransactionExtension, которая объединяет управление сеансами с циклом запроса-ответ пирамиды. В этом случае, чтобы выполнить откат транзакции, Вы должны будете сделать это с помощью менеджера транзакций компании ZTE:

import transaction 
transaction.rollback() 

Обратите внимание, что откат транзакции будет отменить все изменения, сделанные в транзакции, а не только ваше session.execute() заявление. Если вы хотите только «отменить» только одно заявление, вы можете попробовать использовать SQLAlchemy nested transactions, поддержка которого зависит от используемой вами СУБД,

 Смежные вопросы

  • Нет связанных вопросов^_^