On Fri, Oct 27, 2017 at 4:39 PM, <jens.troe...@gmail.com> wrote:

> Thank you Mike!
>
> Yes, indeed you are right and I referred to Single Table Inheritance
> <http://docs.sqlalchemy.org/en/latest/orm/inheritance.html#single-table-inheritance>!
> I would like to version just one subclass, i.e. a subset of that single
> table, and it sounds like that will work (source code link
> <https://bitbucket.org/zzzeek/sqlalchemy/src/f7b957b589207cae98b6feec63be84ee6423c3ca/examples/versioned_history/test_versioning.py?at=master&fileviewer=file-view-default#test_versioning.py-449>,
> though that example versions the base class). Great đź‘Ś
>
> And if I wanted to walk the versions of a particular row, how would I do
> that? Suppose versioning in the example
> <http://docs.sqlalchemy.org/en/latest/orm/inheritance.html#single-table-inheritance>
> on Single Table Inheritance:
>
> # Versioned subclass.
> class Engineer(Versioned, Employee):
>     engineer_info = Column(String(50))
>
> # Retrieve a single Engineer object/row.
> eng = session.query(Engineer).filter(Engineer.id==N).one_or_none()
> # eng.version would give me the current version of the object/row.
> # How can I iterate over previous versions of the object/row?
>
> If I read the history_meta.py
> <https://bitbucket.org/zzzeek/sqlalchemy/src/f7b957b589207cae98b6feec63be84ee6423c3ca/examples/versioned_history/history_meta.py?fileviewer=file-view-default>
>  in
> the example correctly, then versioned objects have a version
> <https://bitbucket.org/zzzeek/sqlalchemy/src/f7b957b589207cae98b6feec63be84ee6423c3ca/examples/versioned_history/history_meta.py?at=master&fileviewer=file-view-default#history_meta.py-88>
>  and
> a changed
> <https://bitbucket.org/zzzeek/sqlalchemy/src/f7b957b589207cae98b6feec63be84ee6423c3ca/examples/versioned_history/history_meta.py?at=master&fileviewer=file-view-default#history_meta.py-95>
>  property,
> but no property that is an iterator over previous versions. I'd have to
> query a history table manually?
>


the history table is mapped to a class attached to the versioned class:

SomeClassHistory = SomeClass.__history_mapper__.class_

        eq_(
            sess.query(SomeClassHistory).filter(
                SomeClassHistory.version == 1).all(),
            [SomeClassHistory(version=1, name='sc1')]
        )


you can add any kind of accessor on the versioned class to return that
for you, like:

def history_cls(cls):

     return cls.__history_mapper__.class_


hist = sess.query(MyClass.history_cls)

or whatever you'd like.    Or you can set this up within the
history_meta routine
itself, I'm not sure why I made it attach the "mapper" like that and
not the class directly.



> Would that be something like
>
> SELECT * FROM EngineerHistory WHERE id=N SORT BY version;  --
> EmployeeHistory??
>
> Cheers!
>
>
> On Saturday, October 28, 2017 at 3:50:08 AM UTC+10, Mike Bayer wrote:
>>
>> On Thu, Oct 26, 2017 at 9:35 PM,  <jens.t...@gmail.com> wrote:
>> > Hello,
>> >
>> > I'm looking for a way track changes to table rows, very much like
>> described
>> > in this Stackoverflow question.
>> >
>> > SA supports versioning objects as described in the documentation:
>> > http://docs.sqlalchemy.org/en/latest/orm/examples.html#versi
>> oning-objects
>> > Does this approach work for inherited classes as well?
>>
>> yes it does, there should be some coverage for joined inheritance in the
>> tests.
>>
>>
>> > I mean: can I version
>> > a class which doesn't have a table but is a subclass of a joined table
>> > inheritance?
>>
>> that would be single table inheritance if it doesn't have a table.
>> the test suite has both a multilevel-joined test and a single
>> inheritance test, doesn't seem to have tested joined inh to single but
>> it's likely it will just work if you try it out.
>>
>> > Or will I need to version the base class which has the table
>> > associated (something I'd like to avoid because I'd version much of
>> what
>> > would not need versioning).
>>
>> I'm not sure if the versioning example tries this but the Versioned
>> mixin can be placed just on the class you care about versioning, and
>> it's likely it will just take effect when that class is present.   The
>> Versioned mixin should be able to deal with each class independently
>> of all the rest.   You'd need to try it out and see what it does.
>>
>>
>>
>> >
>> > Then there is SA Continuum, which seems more flexible but perhaps a
>> little
>> > too much for my needs.
>>
>> It's possible that Continuum was based on this example in the first
>> place but I would never remember if that detail is real or just made
>> up by my imagination.
>>
>>
>> > With projects like Continuum I'm always a bit worried
>> > about support and maintenance—any experiences with it? Does that
>> support
>> > table inheritance?
>>
>> You could reach out to its maintainer (the username that posts it to
>> pypi, and /or the user that seems to have the most commits).  If you
>> don't get a reply, that's a clue :)
>>
>>
>>
>>
>> >
>> > Thanks!
>> > Jens
>> >
>> > --
>> > SQLAlchemy -
>> > The Python SQL Toolkit and Object Relational Mapper
>> >
>> > http://www.sqlalchemy.org/
>> >
>> > To post example code, please provide an MCVE: Minimal, Complete, and
>> > Verifiable Example. See http://stackoverflow.com/help/mcve for a full
>> > description.
>> > ---
>> > 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.
>> > To post to this group, send email to sqlal...@googlegroups.com.
>> > Visit this group at https://groups.google.com/group/sqlalchemy.
>> > For more options, visit https://groups.google.com/d/optout.
>>
> --
> SQLAlchemy -
> The Python SQL Toolkit and Object Relational Mapper
>
> http://www.sqlalchemy.org/
>
> To post example code, please provide an MCVE: Minimal, Complete, and
> Verifiable Example. See http://stackoverflow.com/help/mcve for a full
> description.
> ---
> 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.
>

-- 
SQLAlchemy - 
The Python SQL Toolkit and Object Relational Mapper

http://www.sqlalchemy.org/

To post example code, please provide an MCVE: Minimal, Complete, and Verifiable 
Example.  See  http://stackoverflow.com/help/mcve for a full description.
--- 
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.

Reply via email to