So basically, a Child object may set it's own value for time, but if it's not set, it uses the value from its parent.This works, but I would also like to be able to do something like:session.query(Child).filter(Child.parent.another_id==2)(Which would throw Neither 'InstrumentedAttribute' object nor 'Comparator' object has an attribute 'another_id')
Thank you, Michael!But could I achieve it somehow using hybrid properties and a case statement?I tried something like:@hybrid_propertydef time(self):return self._time or self.event.time@time.expressiondef time(cls):return case([(cls._time != None, cls._time)], else_=cls.parent.time)but that doesn't work:AttributeError: Neither 'InstrumentedAttribute' object nor 'Comparator' object has an attribute 'time'
Now again I would have to join the corresponding Parent class and filter then, but I can't do that as part of the case statement (http://stackoverflow.com/a/6994915/1175818), so I wondered of there could be any other trick that sqlalchemy offers.I have no problem in joining to the Parent class, I just don't know how I could do it in the hybrid expression.Regards,MoritzAm Samstag, 21. April 2012 16:15:50 UTC+2 schrieb Michael Bayer:On Apr 21, 2012, at 7:06 AM, Moritz Schlarb wrote:So basically, a Child object may set it's own value for time, but if it's not set, it uses the value from its parent.This works, but I would also like to be able to do something like:session.query(Child).filter(Child.parent.another_id==2)(Which would throw Neither 'InstrumentedAttribute' object nor 'Comparator' object has an attribute 'another_id')SQLAlchemy doesn't implicitly generate joins when you call attributes from relationship-bound attribute (here, Child.parent is a relationship-bound attribute and "another_id" is an attribute you're trying to call from it).instead, you need to think in SQL and tell SQLAlchemy that you'd like to join from Child to Parent:query(Child).join(Child.parent).filter(Parent.another_id==2)joining is covered in the tutorial at http://docs.sqlalchemy.org/en/latest/orm/tutorial.html#querying-with-joins .Also when you do a query from inside of a @property, you might want to use object_session() to get at the Session. A similar example to what you're doing is here:
--
You received this message because you are subscribed to the Google Groups "sqlalchemy" group.
To view this discussion on the web visit https://groups.google.com/d/msg/sqlalchemy/-/oouab8xG8K4J.
To post to this group, send email to sqlal...@googlegroups.com.
To unsubscribe from this group, send email to sqlalchemy+...@googlegroups.com.
For more options, visit this group at http://groups.google.com/group/sqlalchemy?hl=en.