I am trying to create a generic "versioned" SQLAlchemy table model, from 
which I can derive further models. Among other things, I need a 
*is_latest_version* column property that can be used to create appropriate 
joins… 

Following code works fine:

    class Versioned(db.Model):
        __abstract__ = True
        id = Column(Integer, primary_key=True)
        version = Column(Integer, primary_key=True)
                            
    class Child(Versioned):
        pass
        
    t = aliased(Child, name="t")
    Child.is_latest_version =  db.column_property(
                    select([ Child.version == db.func.max(t.version) ])
                    .select_from(t)
                    .where(t.id == Child.id)
                )



But I cannot figure any way to move the column property up to the parent 
class. Any variation I attempt, bumps into class mapping issues…

Closest I could think off, would be something like:

    class Versioned(db.Model):
        __abstract__ = True
        id = Column(Integer, primary_key=True)
        version = Column(Integer, primary_key=True)
        
        @declared_attr
        def is_latest_version(cls):
            t = aliased(cls, name="t")
            return db.column_property(
                        select([ cls.version == db.func.max(t.version) ])
                        .select_from(t)
                        .where(t.id == cls.id)
                    )
                    
    class Child(Versioned):
        pass



But it throws an error:
`sqlalchemy.orm.exc.UnmappedClassError: Class 'app.models.Child' is not 
mapped`

Using quotes does not work either (query is executed with quoted fields as 
literal strings).

Is there any way to achieve this kind of column_property in a virtual class?

Also… Not sure if that's related, but I also seem unable to implement 
*is_latest_version* with a nicer join-based query (I suspect solving my 
Alias issues might help):
… FROM child c1 JOIN child c2 ON c2.id = c1.id AND c2.version > c1.version 
WHERE c2.id IS NULL


Thanks in advance for any help!
-- 
Dave

-- 
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