Ho ricevuto un errore nel modo seguente nel mio codice di python (che raccoglie gli stati di Twitter e memorizza nel database).SQLAlchemy Errore di rollback annidato
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.
Voglio sapere qual è il problema, perché si verifica e come posso risolverlo.
Non ho idea di nested rollback
. C'è un semplice esempio che si verifica nested rollback
?
EDIT: Il problema è stato risolto. Il punto in questo caso è che il rollback non viene eseguito finché non richiamiamo il rollback in modo esplicito, quindi quando includiamo commit()
, dovremmo scriverlo in una dichiarazione try e scrivere rollback()
nell'istruzione exception (nella maggior parte dei casi) come scritto in http://www.sqlalchemy.org/trac/wiki/FAQ#Thetransactionisinactiveduetoarollbackinasubtransaction
E, ecco l'esempio di codice corretto. Ho citato questo dal link qui sopra.
try:
<use session>
session.commit()
except:
session.rollback()
raise
finally:
session.close() # optional, depends on use case
Capito. Quindi, dovrei scrivere "session.rollback()" ** esplicitamente ** nell'istruzione delle eccezioni. Mille grazie. – fbessho
Il collegamento non è rotto, ma la sezione non esiste più ... – fedorqui
Collegamento interrotto ...! –