when do I have to do a rollback so the app keep working fine

28 views
Skip to first unread message

dcg...@gmail.com

unread,
Apr 17, 2015, 8:20:55 PM4/17/15
to sqlal...@googlegroups.com
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()?

David Allouche

unread,
Apr 27, 2015, 7:40:09 AM4/27/15
to sqlal...@googlegroups.com
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.

Mike Bayer

unread,
Apr 27, 2015, 11:31:02 AM4/27/15
to sqlal...@googlegroups.com
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


David Chavez

unread,
Apr 28, 2015, 3:23:30 AM4/28/15
to sqlal...@googlegroups.com
Thank you, I looked at it and it is quite more complicated than I
thought it was, really extensive what you have there. If it's not too
much to ask can anyone explain a little bit how to use that?
> --
> You received this message because you are subscribed to a topic in the
> Google Groups "sqlalchemy" group.
> To unsubscribe from this topic, visit
> https://groups.google.com/d/topic/sqlalchemy/Uifgo8n7yHw/unsubscribe.
> To unsubscribe from this group and all its topics, send an email to
> sqlalchemy+...@googlegroups.com.
> To post to this group, send email to sqlal...@googlegroups.com.
> Visit this group at http://groups.google.com/group/sqlalchemy.
> For more options, visit https://groups.google.com/d/optout.
>
Reply all
Reply to author
Forward
0 new messages