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

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<sqlalchemy%2bunsubscr...@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.

Reply via email to