On Aug 22, 2010, at 10:44 PM, Mahmoud Abdelkader wrote: > Hi Michael, > > Thanks for responding. Will there be any backward incompatibility issues with > a SQLAlchemy upgrade to the tip? We're using SQLAlchemy in a rather large > project. > > Thanks! > Mahmoud
If your app sticks to traditional SQLAlchemy patterns, the upgrade to 0.6 shouldn't have issues - the biggest one could be that you'd have to upgrade your sqlalchemy-migrate if you're on an older version, and I believe they had an API change. An overview of SQLAlchemy changes from 0.5 -> 0.6 is at http://www.sqlalchemy.org/trac/wiki/06Migration . Note that the PoolListener approach will work perfectly fine in 0.5, that's what the "isolation_level" argument in 0.6 uses in any case. Docs are http://www.sqlalchemy.org/docs/reference/sqlalchemy/interfaces.html?highlight=poollistener#sqlalchemy.interfaces.PoolListener . > > On Sat, Aug 21, 2010 at 10:51 AM, Michael Bayer <mike...@zzzcomputing.com> > wrote: > > On Aug 19, 2010, at 6:32 PM, Mahmoud Abdelkader wrote: > >> NOTE: I originally posted this question to stack overflow, >> http://stackoverflow.com/questions/3518863/how-do-i-set-the-transaction-isolation-level-in-sqlalchemy-for-postgresql >> , but I haven't received an answer yet. If I find the answer here, I'll >> send it over to stackoverflow for thoroughness. >> >> We're using SQLAlchemy declarative base and I have a method that I want >> isolate the transaction level for. To explain, there are two processes >> concurrently writing to the database and I must have them execute their >> logic in a transaction. The default transaction isolation level is READ >> COMMITTED, but I need to be able to execute a piece of code using >> SERIALIZABLE isolation levels. > > Please use the "isolation_level" argument to create_engine() > (http://www.sqlalchemy.org/docs/reference/dialects/postgresql.html?highlight=isolation_level#transaction-isolation-level) > and use the latest tip of SQLAlchemy > (http://hg.sqlalchemy.org/sqlalchemy/archive/default.tar.gz) until 0.6.4 is > released, as there was a psycopg2-specific bug fixed recently regarding > isolation level. > > The approach you have below does not affect the same connection which is > later used for querying - you'd instead use a PoolListener that sets up > set_isolation_level on all connections as they are created. > > > > >> >> from psycopg2.extensions import ISOLATION_LEVEL_AUTOCOMMIT >> from psycopg2.extensions import ISOLATION_LEVEL_READ_COMMITTED >> from psycopg2.extensions import ISOLATION_LEVEL_SERIALIZABLE >> >> class OurClass(SQLAlchemyBaseModel): >> >> @classmethod >> def set_isolation_level(cls, level=ISOLATION_LEVEL_SERIALIZABLE): >> cls.get_engine().connect().connection.set_isolation_level(level) > >> >> @classmethod >> def find_or_create(cls, **kwargs): >> try: >> return cls.query().filter_by(**kwargs).one() >> except NoResultFound: >> x = cls(**kwargs) >> x.save() >> return x >> I am doing this to invoke this using a transaction isolation level, but it's >> not doing what I expect. The isolation level still is READ COMMITTED from >> what I see in the postgres logs. Can someone help identify what I'm doing >> anythign wrong? >> >> I'm using SQLAlchemy 0.5.5 >> >> class Foo(OurClass): >> >> def insert_this(self, kwarg1=value1): >> # I am trying to set the isolation level to SERIALIZABLE >> try: >> self.set_isolation_level() >> with Session.begin(): >> self.find_or_create(kwarg1=value1) >> except Exception: # if any exception is thrown... >> print "I caught an expection." >> print sys.exc_info() >> finally: >> # Make the isolation level back to READ COMMITTED >> self.set_isolation_level(ISOLATION_LEVEL_READ_COMMITTED) >> >> >> >> Appreciate the assistance! >> Thanks >> Mahmoud >> >> -- >> You received this message because you are subscribed to the Google Groups >> "sqlalchemy" group. >> To post to this group, send email to sqlalch...@googlegroups.com. >> To unsubscribe from this group, send email to >> sqlalchemy+unsubscr...@googlegroups.com. >> For more options, visit this group at >> http://groups.google.com/group/sqlalchemy?hl=en. > > > -- > You received this message because you are subscribed to the Google Groups > "sqlalchemy" group. > To post to this group, send email to sqlalch...@googlegroups.com. > To unsubscribe from this group, send email to > sqlalchemy+unsubscr...@googlegroups.com. > For more options, visit this group at > http://groups.google.com/group/sqlalchemy?hl=en. > > > -- > You received this message because you are subscribed to the Google Groups > "sqlalchemy" group. > To post to this group, send email to sqlalch...@googlegroups.com. > To unsubscribe from this group, send email to > sqlalchemy+unsubscr...@googlegroups.com. > For more options, visit this group at > http://groups.google.com/group/sqlalchemy?hl=en. -- You received this message because you are subscribed to the Google Groups "sqlalchemy" group. To post to this group, send email to sqlalch...@googlegroups.com. To unsubscribe from this group, send email to sqlalchemy+unsubscr...@googlegroups.com. For more options, visit this group at http://groups.google.com/group/sqlalchemy?hl=en.