I've found a strange behaviour when using multiple sessions: A committed change to an object in one session does not get reflected in the other session, even after a session.expire_all() (or expire() or refresh() on the object. In fact, even an explicit query does not retrieve the changed data. I'm using MySQL. Further investigation showed that it happens only with InnoDB. Using MyISAM produces the expected results. Looks like a caching issue with InnoDB.
Here is some test code: -------------------------------------------- from sqlalchemy import create_engine, Table, Column, Integer from sqlalchemy.orm import sessionmaker from sqlalchemy.ext.declarative import declarative_base Base=declarative_base() class A(Base): __tablename__="a" __table_args__ = {'mysql_engine':'InnoDB'} id = Column(Integer, primary_key=True) data = Column(Integer) engine = create_engine('mysql://localhost/test') Base.metadata.bind = engine Base.metadata.drop_all() Base.metadata.create_all() Session = sessionmaker(bind=engine) session1 = Session() session2 = Session() a1 = A() a1.id = 1 a1.data = 123 session1.add(a1) session1.commit() print a1.data # trigger query of a1.data a2 = session2.query(A).one() print a1,a2 # to see that a1 and a2 are different objects print a2.data a2.data = 999 session2.commit() print "a1.data: ", a1.data print "session1.query(A.data): ", session1.query(A.data).one()[0] print "session2.query(A.data): ", session2.query(A.data).one()[0] print "session1.expire_all()" session1.expire_all() print "a1.data: ", a1.data print "session1.query(A.data): ", session1.query(A.data).one()[0] print "session2.query(A.data): ", session2.query(A.data).one()[0] ------------------------------------ The output is: 123 a1.data: 123 session1.query(A.data): 123 session2.query(A.data): 999 session1.expire_all() a1.data: 123 session1.query(A.data): 123 session2.query(A.data): 999 When commenting out the __table_args__ line in order to use MyISAM, the output is what one would expect: 123 a1.data: 123 session1.query(A.data): 999 session2.query(A.data): 999 session1.expire_all() a1.data: 999 session1.query(A.data): 999 session2.query(A.data): 999 Any idea? Thanks, Erich -- You received this message because you are subscribed to the Google Groups "sqlalchemy" group. To post to this group, send email to sqlalch...@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.