On 4/27/15 7:40 AM, David Allouche wrote:
On 18 Apr 2015, at 02:20, dcgh...@gmail.com wrote:

Hi everyone, I have a considerably amount of code that uses SQLAlchemy and I 
want to implement a decorator that captures the SQLAlchemy exceptions, then 
make session.rollback() and recall the decorated function, so I don't have to 
write the try except statement whenever I use SQLAlchemy.
For implementing such a decorator I need the exceptions I can certainly capture 
to make session.rollback() and the app keep working fine because there are 
exceptions that will cause an endless loop and should never be captured (e.g., 
generating the same primary key due to a bug and always raising IntegrityError)
So, can anyone tell me what are those exceptions that are safe to make 
session.rollback()?
I guess that your intent is to retry transactions that failed because of a 
serialisation error in the SERIALIZABLE isolation level.

My understanding is that, to SQLAlchemy, this is a database-specific issue. You 
can expect the SQLAlchemy exception to be an OperationalError, but you would 
need to add additional checks to specifically identify the kind error returned 
by your database driver. An argument could be made that serialisation errors 
should be wrapped in a more specific exception class by SQLAlchemy, but I do 
not believe that is the case at the moment.

I am no expert, so please someone correct me if I am wrong.

that's pretty much the current situation - OperationalError refers to "something went wrong with the connection" and IntegrityError means "something went wrong with the data the query is attempting to modify".

In Openstack we have an elaborate system of catching those exceptions we care about across many backends; this is probably more than you need but this is sort of what is needed: https://github.com/openstack/oslo.db/blob/master/oslo_db/sqlalchemy/exc_filters.py


--
You received this message because you are subscribed to the Google Groups 
"sqlalchemy" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to sqlalchemy+unsubscr...@googlegroups.com.
To post to this group, send email to sqlalchemy@googlegroups.com.
Visit this group at http://groups.google.com/group/sqlalchemy.
For more options, visit https://groups.google.com/d/optout.

Reply via email to