On May 27, 2008, at 5:35 PM, TP wrote:
> > From reading the docs, it sounds like calling .close() on a session > implicitly does a .rollback(): > > "When the Session is closed, it remains attached, but clears all of > its contents and releases any ongoing transactional resources, > including rolling back any remaining transactional state. The Session > can then be used again." > > But, it looks like this may not be the case? > > I have an application that reads data from a MySQL db using InnoDB > tables and the session is set to transactional. I believe this > defaults me into MySQL's "repeatable read" consistency level. If I > select some data, .clear()/.close() the session, change the data from > another connection and then re-read the data using the original > session I get the old data. If I do a commit() I can then see the new > data. > > This makes me think that .close() is not doing a rollback so MySQL > keeps returning the same data for every select regardless of whether > it has changed in the DB. Or am I missing something else? what close() does is release any checked-out connection resources which the Session might have used. The connection pool by default issues rollback() on connections when they are returned, so thats the rollback which happens; the connection is gone from the Session in any case. There is also a behavior in 0.4 which is gone in 0.5 which is that the connection pool is returning connections from a threadlocal registry. So if you have two sessions in the same thread, they're going to share that connection. In 0.4 this can be turned off by sending "pool_threadlocal=False" to create_engine(). Otherwise, it sounds like you are binding your Session directly to a Connection. In that case you'd just issue rollback() on that session which will issue the rollback() on the connection, and then an expire_all() or clear(). If you're just starting to use SA, I'd strongly recommend using the 0.5 trunk which will start having alpha releases soon. The transactional interaction has been greatly improved, and rollback() will revert the state of the session fully using attribute expiry as well as reverting "pending" and "deleted" objects to "transient" and "persistent" respectively. --~--~---------~--~----~------------~-------~--~----~ 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 -~----------~----~----~----~------~----~------~--~---
