I am not holding engine or using event.listen anywhere. Code is as simple as
def create_sn(url): engine = create_engine(url) return sessionmaker(bind=engine)(expire_on_commit=False) sn = create_sn(url) try: sn... finally: sn.close() sn.bind.dispose() In engine/strategies.py DefaultEngineStrategy => create I see event.listen(pool, 'first_connect', ...) event.listen(pool, 'connect', ...) But didn't find an equivalent event.remove ?? Anoop On Friday, 11 January 2013 11:03:57 UTC+5:30, Michael Bayer wrote: > > this is all about whatever you've done specifically. If you have the > Session instance still around, where my_session.bind still points to your > Engine, then that Engine is still in memory - you're holding a reference to > it. Similarly, if you've assigned an event to the Session class whose > callable refers to the Engine in question, then the Engine is still > referenced as well, such as: > > def make_evt(engine): > @event.listens_for(Session, "before_flush") > def go(session, ctx): > # do something with engine > > make_evt(my_engine) > > the above code will associate "my_engine" with a class-level Session > listener and cannot be dereferenced without unloading all of sqlalchemy.orm. > > dispose() and NullPool have *nothing to do* with the Engine itself, only > the connections inside the pool contained within. Your Engine will remain > present as long as its reachable via references, just like any other Python > object. > > > > On Jan 10, 2013, at 11:55 PM, Anoop K wrote: > > I tried session.bind.dispose() and NullPool. But engine *is still not > cleared*. It still seems to have some reference from > SessionEventsDispatch => sqlalchemy.event._DispatchDescriptor. > > > > On Friday, 11 January 2013 05:24:19 UTC+5:30, Michael Bayer wrote: >> >> >> On Jan 10, 2013, at 8:25 AM, Anoop K wrote: >> >> It seems engine created using *create_engine* is not freed after cleanup >> of a session. Object graph indicates that event.listen for pool is holding >> reference to engine even after session is garbage collected. >> *What is the right way/api to delete an engine ?* >> >> *UseCase* >> As there are lot of databases in multiple boxes whose ip/user/password >> can change I would like to destroy *session and engine* after use. Cost >> of creating/closing connection can be ignored for my use case. >> >> >> >> engines can be disposed using engine.dispose() to close connections >> referred to by the pool, and then removing all references to that engine. >> >> if you aren't concerned about connection pooling (which seems to be the >> case here if you're looking to dispose engines regularly) then just use >> NullPool with create_engine(..., pool_class=NullPool). Then dispose() >> isn't really needed, just lose references to the engine. >> >> >> >> >> >> >> >> >> >> -- >> You received this message because you are subscribed to the Google Groups >> "sqlalchemy" group. >> To view this discussion on the web visit >> https://groups.google.com/d/msg/sqlalchemy/-/bTtgyK4eAy4J. >> 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. >> >> >> > -- > You received this message because you are subscribed to the Google Groups > "sqlalchemy" group. > To view this discussion on the web visit > https://groups.google.com/d/msg/sqlalchemy/-/xtb_18kV1ZUJ. > To post to this group, send email to [email protected]<javascript:> > . > To unsubscribe from this group, send email to > [email protected] <javascript:>. > 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 view this discussion on the web visit https://groups.google.com/d/msg/sqlalchemy/-/N65z6tSD6IsJ. 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.
