metadata.reflect() would close() the connection used for reflection as it assumed it was passed an Engine, not a Connection, fixed in r926ee70b67ff. Nothing to do with begin_nested() or anything like that.
On Jun 1, 2011, at 5:10 PM, Jon Nelson wrote: > I've got a chunk of code that started failed as soon as I started > testing with 0.7. > The failure is: > > sqlalchemy.exc.StatementError: This Connection is closed '\nCREATE > TABLE bar (\n\ta TEXT NOT NULL\n)\n\n' None > > I'll note that the logging indicates that the connection was returned > to the pool *un* closed. > The following code demonstrates the issue. > I am using postgresql 9.0 > > Is this a bug? > > > > > > #! /usr/bin/python > # -*- coding: utf-8 -*- > import sys > import logging > import sqlalchemy as sa > import sqlalchemy.orm as sa_orm > > logger = logging.getLogger({ '__main__': None }.get(__name__, __name__)) > > def setup_logging(): > logging.basicConfig(stream=sys.stderr, level=logging.WARNING, > format="%(asctime)s:%(levelname)s:%(name)s:%(message)s") > logging.getLogger().setLevel(logging.DEBUG) > logging.getLogger('sqlalchemy').setLevel(logging.DEBUG) > > def prep_database(dburi): > engine_opts = dict() > engine_opts['url'] = dburi > > session_opts = dict(autoflush=False, autocommit=True) > > engine = sa.engine_from_config(engine_opts, prefix='') > factory = sa_orm.sessionmaker(bind=engine, **session_opts) > > meta = sa.MetaData() > dbsession = factory() > > return (dbsession, meta) > > def main(): > setup_logging() > dburi = sys.argv[1] > (sess, meta) = prep_database(dburi) > > sess.begin() > conn = sess.connection() > > if 'bar' not in meta.tables: > sess.begin_nested() > try: > meta.reflect(bind=conn, only=['bar']) > except: > pass > sess.rollback() # not a real rollback > > if 'bar' not in meta.tables: > t = sa.Table('bar', meta, > sa.Column('a', sa.TEXT(), nullable=False), > ) > t.create(bind=conn) > > if 'bar' in meta.tables: > t = meta.tables['bar'] > t.drop() > meta.remove(t) > del t > > sess.commit() > > if __name__ == '__main__': > main() > > -- > Jon > > -- > You received this message because you are subscribed to the Google Groups > "sqlalchemy" group. > To post to this group, send email to sqlalchemy@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 sqlalchemy@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.