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.pedr...@gmail.com> 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+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. > -- 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.