On Wed, 2010-07-28 at 11:33 +0000, Faheem Mitha wrote:

> On Wed, 28 Jul 2010 15:17:09 +0530 (IST), Faheem Mitha <[email protected]> 
> wrote:
> >
> > Hi,
> 
> > When calling create_all on a metadata instance after a session has
> > alrady been opened causes the create_all to hang, I assume because
> > the session is blocking the create_all. Is there some way to get
> > create_all to use the existing session, or any other graceful way
> > around this? Thanks.
> 
> > I guess another option is to close and then reopen the session after
> > the create_all has been called, but I'd prefer not to do that if
> > possible.
> 
> Puting a session.close() before the create_all fixes the problem. I
> assume this means that create_all doesn't work in the middle of a
> transaction, or something like that?


I can't speak to the underlying mechanics of create_all(), but calling
session.close() prior to create_all() would work, as you say.  Another
option would be to simply not use a session, but instead just a
*connection*.  Sessions are specific to the ORM which, according to the
code you posted, you are not using.  So if you really just need to make
a SELECT call to a table, then instead of creating a session and
calling .execute() on it, you could instead do this:


db = create_engine(dbstring)
meta.bind = db
db.echo = 'debug'
make_foo(meta)
meta.create_all()
db.connect().execute("select * from foo;")
make_bar(meta)
meta.create_all()


Lance

-- 
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.

Reply via email to