Thank you Simon I hadn't realized that sessions are created with autoflush=True
So would each change make to any object in session followed by a query trigger a version increase? I am about to test this scenario: assert sc.version == 1 sc.name = "a" query... sc.name = "b" query.. assert sc.version == 3 // << 2 changes => 2 new versions? On Friday, September 2, 2016 at 11:21:02 AM UTC-5, Simon King wrote: > > By default, the session is flushed before any query, so that the query > results are consistent with changes you may have made in-memory: > > http://docs.sqlalchemy.org/en/latest/orm/session_basics.html#flushing > > Hope that helps, > > Simon > > On Fri, Sep 2, 2016 at 5:12 PM, HP3 <henddher...@gmail.com <javascript:>> > wrote: > >> Hello all: >> >> >> We are running into an issue while using history_meta.py >> (examples/versioned_history). >> >> >> I am running test_versioning.py (via sqla_nose) but I am confused about >> test_relationship unit-test. >> >> >> It asserts sc.version == 3 without an intermediate sess.commit() ... why >> would the version changed before commit (i.e. what triggers the hook for >> the event before_flush in this test-case)? >> >> >> See >> https://github.com/zzzeek/sqlalchemy/blob/master/examples/versioned_history/test_versioning.py#L556-L577 >> >> >> def test_relationship(self): >> class SomeRelated(self.Base, ComparableEntity): >> __tablename__ = 'somerelated' >> id = Column(Integer, primary_key=True) >> class SomeClass(Versioned, self.Base, ComparableEntity): >> __tablename__ = 'sometable' >> id = Column(Integer, primary_key=True) >> name = Column(String(50)) >> related_id = Column(Integer, ForeignKey('somerelated.id')) >> related = relationship("SomeRelated", backref='classes') >> SomeClassHistory = SomeClass.__history_mapper__.class_ >> self.create_tables() >> sess = self.session >> sc = SomeClass(name='sc1') >> sess.add(sc) >> sess.commit() >> assert sc.version == 1 >> sr1 = SomeRelated() >> sc.related = sr1 >> sess.commit() >> assert sc.version == 2 >> eq_( >> sess.query(SomeClassHistory).filter( >> SomeClassHistory.version == 1).all(), >> [SomeClassHistory(version=1, name='sc1', related_id=None)] >> ) >> sc.related = None >> eq_( >> sess.query(SomeClassHistory).order_by( >> SomeClassHistory.version).all(), >> [ >> SomeClassHistory(version=1, name='sc1', related_id=None), >> SomeClassHistory(version=2, name='sc1', related_id=sr1.id) >> ] >> ) >> assert sc.version == 3 >> >> Line 566 alters the relationship but there is no commit ... however, >> query on history tables reveals version changes even though there was no >> commit/flush in between. >> >> >> As far as I understand the versioned_history recipe, version (rows in >> history tables) are created when event 'before_flush' is triggered. >> >> >> Does such event trigger when sess.query(SomeClassHistory)... is called? >> >> ... It seems like it but why? >> >> >> Any help is very much appreciated >> >> -- >> You received this message because you are subscribed to the Google Groups >> "sqlalchemy" group. >> To unsubscribe from this group and stop receiving emails from it, send an >> email to sqlalchemy+...@googlegroups.com <javascript:>. >> To post to this group, send email to sqlal...@googlegroups.com >> <javascript:>. >> Visit this group at https://groups.google.com/group/sqlalchemy. >> For more options, visit https://groups.google.com/d/optout. >> > > -- You received this message because you are subscribed to the Google Groups "sqlalchemy" group. To unsubscribe from this group and stop receiving emails from it, send an email to sqlalchemy+unsubscr...@googlegroups.com. To post to this group, send email to sqlalchemy@googlegroups.com. Visit this group at https://groups.google.com/group/sqlalchemy. For more options, visit https://groups.google.com/d/optout.