Я получил следующую ошибку в моем коде python (который собирает статусы твиттера и сохраняет их в базе данных).
sqlalchemy.exc.InvalidRequestError: This Session's transaction has been rolled back by a nested rollback() call. To begin a new transaction, issue Session.rollback() first.
Я хочу знать, в чем проблема, почему она возникает и как ее решить.
Я понятия не имею о вложенном откате
. Есть ли какой-нибудь простой пример, который происходит вложенный откат
?
Проблема была решена. Дело в том, что в этом случае откат не выполняется до тех пор, пока мы не вызовем откат явно, поэтому, когда мы включаем commit()
, мы должны записать его в оператор try и написать rollback()
в оператор исключения (в большинстве случаев) как написано в http://www.sqlalchemy.org/trac/wiki/FAQ#Thetransactionisinactiveduetoarollbackinasubtransaction
И вот правильный пример кода. Я цитировал это по ссылке выше.
try:
<use session>
session.commit()
except:
session.rollback()
raise
finally:
session.close() # optional, depends on use case