[Twisted-web] Twisted and SQLAlchemy Cache Problem

Manlio Perillo manlio_perillo at libero.it
Wed Jun 13 10:16:41 EDT 2007

Magnus Hult ha scritto:
> Thanks for your swift reply!
> On 6/13/07, Manlio Perillo <manlio_perillo at libero.it> wrote:
>> Magnus Hult ha scritto:
>> > When executing the following program, changes in the database (other
>> > than those made by this program) aren't visible until it is restarted,
>> > due to some form of SQLAlchemy caching:
>> Are you using PostgreSQL?
> Yes, I am. With psycopg2.
>> [...]
>> The solution is: make sure to add a commit after every select.
> It doesn't seem to help though. In fact, the following little program
> t = objectstore.create_transaction()
> m = model.MyModel.get(1)
> print m.some_column
> t.commit()
> sys.stdin.readline()
> t = objectstore.create_transaction()
> m = model.MyModel.get(1)
> print m.some_column
> t.commit()
> only seems to execute one select statement. The other result seems to
> be taken from the cache. If this is the case, then this question would
> rather belong in an SQLAlchemy mailing list, I guess.

The problem can be this:

After the first "select" you do not reset the Unif Of Work.
In my queries I always do:

     def _sessionTransaction(self, callable_, *args, **kwargs):
         from sqlalchemy import orm

         conn = self.contextual_connect()
         sess = orm.create_session(bind_to=conn) # This cannot fail

             trans = sess.create_transaction()
                 ret = callable_(conn, sess, *args, **kwargs)
                 return ret
             sess.close() # This cannot fail

I create and close a new session object for every request.
You can give a look at my nadbapi:

Regards  Manlio Perillo

More information about the Twisted-web mailing list