Wolodja Wentland wrote:
> On Tue, Oct 27, 2009 at 16:22 -0400, Michael Bayer wrote:
>> Wolodja Wentland wrote:
>> >
>> > def create(self):
>> > """Create this database"""
>> > # set isolation level to AUTOCOMMIT
>> > # postgres can't CREATE databases within a transaction
>> > self._admin_engine.connect().connection.connection.set_isolation_level(
>> > ISOLATION_LEVEL_AUTOCOMMIT)
>> >
>> > self.admin_session.execute('CREATE DATABASE %s'%(self.name))
>
>> there's nothing about the above code that guarantees the connection on
>> which you called set_isolation_level() is the one used by your
>> session.execute(). I think you mean to call execute("CREATE DATABASE")
>> on the connection returned by self._admin_engine.connect().
>
> You are right! I changed the code to this:
>
> --- snip ---
> def create(self):
> """Create this database"""
> # set isolation level to AUTOCOMMIT
> # postgres can't CREATE databases within a transaction
> conn = self._admin_engine.connect()
> conn.connection.connection.set_isolation_level(
> ISOLATION_LEVEL_AUTOCOMMIT)
>
> conn.execute('CREATE DATABASE %s'%(self.name))
>
> conn.connection.connection.set_isolation_level(
> ISOLATION_LEVEL_READ_COMMITTED)
> --- snip ---
>
> and it works like a charm.
>
> But i still have some little questions...
>
> * Is there an even better way to do this? ;-)
create_engine() for PG supports an "isolation_level" parameter. But it
only does the four levels PG provides, it doesn't yet have a hook for
Psycopg2's "autocommit" mode.
>
> * Is it necessary to set the isolation level to the value it had
> before I set it to ISOLATION_LEVEL_AUTOCOMMIT to make sure that no
> connection uses ISOLATION_LEVEL_AUTOCOMMIT in the future without
> explicitly setting that?
the way you have it, yes. Alternatively, you can call detach() on the
connection you returned and it will be de-associated from the connection
pool. Otherwise I would absolutely use try/finally above so that the
isolation level is returned to normal if the CREATE DATABASE fails.
>
> * Why the .connection.connection ? I remember that I had to write just
> one .connection in the past.
it should only need to be conn.connection. That returns a wrapper that
will pass all method calls down to the psycopg2 connection. would be
interested to know the error otherwise.
>
> And one more word... This is the fastest mailing list I have ever used.
> Thank you so much for reacting so fast on this ML, thank you very much
> for SA and thanks for the solution to my problem!
youre welcome
>
> have a great afternoon
>
> Wolodja Wentland
>
--~--~---------~--~----~------------~-------~--~----~
You received this message because you are subscribed to the Google Groups
"sqlalchemy" group.
To post to this group, send email to [email protected]
To unsubscribe from this group, send email to
[email protected]
For more options, visit this group at
http://groups.google.com/group/sqlalchemy?hl=en
-~----------~----~----~----~------~----~------~--~---