Hi Michael, On Monday, 24 August 2015 12:31:20 UTC+10, Michael Bayer wrote: > > yes and no. Yes, if there's no "added" history, that should be skipped as > you're doing, but no in that that particular line of code is not called if > an object is being saved for the first time, only on an update, and then > only if that attribute actually had a change, which you are saying this > attribute did not. > > so if you can please share: 1. a mapping and an exact usage that > illustrates how this is happening 2. what exact version of SQLAlchemy are > you using and 3. have you modified the history_meta.py recipe in any way? >
Oops, sorry for leaving that out the first time. I'm using SQLAlchemy 1.0.8 on Python 3. I have modified *history_meta.py* for my app, but if I revert the changes the problem is still there. It turns out that the problem happens when the session gets flushed twice. For example: document = Document() self.session.add(document) self.session.flush() document.name = 'Foo' self.session.flush() # IndexError: tuple index out of range In my app I think I need to call flush several times, because I'm building a tree and I need to know the parent IDs. Perhaps I could rearrange my code to not need to do this. Additionally, if I set a different name for a column than the attribute name (as shown below), the value doesn't get propagated to the history table. description_ = Column('description', String, nullable=True) See here for unit tests for both of these issues. It uses an unmodified *history_meta.py*. https://github.com/z0u/satest/blob/master/test_versioned.py Cheers, Alex -- 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 http://groups.google.com/group/sqlalchemy. For more options, visit https://groups.google.com/d/optout.