On Mar 8, 2012, at 7:28 AM, Eric Lemoine wrote: > On Thu, Mar 8, 2012 at 3:59 PM, Eric Lemoine > <eric.lemo...@camptocamp.com> wrote: >> Hi >> >> My code basically does: >> >> --- >> engine = create_engine() >> >> table = Table('table', MetaData(), Column('id', Integer, primary_key=True)) >> table.create(bind=engine) >> >> Session = scoped_session(sessionmaker(bind=engine)) >> Session.execute(text('SELECT id from table')) >> --- >> >> The last statement blocks forever. It's like table.create created a >> transaction, and locked the table. Session.execute is blocked on this >> lock. >> >> I use Postgres. Any idea what I'm doing wrong? > > > Here's the actual test case: > > --- > from sqlalchemy import Table, MetaData, Column, create_engine > from sqlalchemy import types, text > > engine = > create_engine('postgresql://www-data:www-data@localhost:5432/c2cgeoportal_test') > > table = Table('table_d', MetaData(), > Column('id', types.Integer, primary_key=True) > ) > table.create(bind=engine) > > from sqlalchemy.orm import sessionmaker > Session = sessionmaker(bind=engine) > Session().execute(text('SELECT id FROM table_d')) # blocks forever! > > table.drop(bind=engine)
if you do a "ps -ef | grep post" you can see it's making it to the drop. The drop is blocking because the execute of a SELECT has returned an open cursor for you to consume. The table has a reader within a transaction distinct from that of the drop. -- 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.