What happens if you put the print statement immediately after the class definition? Is there any chance that you've got "nsa_logmstar = None" somewhere in your class definition?
Here's a test script which appears to work: import math import sqlalchemy as sa import sqlalchemy.orm as saorm from sqlalchemy.ext.hybrid import hybrid_property from sqlalchemy.ext.declarative import declarative_base Base = declarative_base() class Sample(Base): __tablename__ = 'sample' pk = sa.Column(sa.Integer, primary_key=True) nsa_mstar = sa.Column(sa.Float) @hybrid_property def nsa_logmstar(self): try: return math.log10(self.nsa_mstar) except ValueError: return -9999.0 except TypeError: return None @nsa_logmstar.expression def nsa_logmstar(cls): return sa.func.log(cls.nsa_mstar) if __name__ == '__main__': sm = saorm.sessionmaker() session = sm() print session.query(Sample.pk).filter(Sample.nsa_logmstar < 9) And here's the output: SELECT sample.pk AS sample_pk FROM sample WHERE log(sample.nsa_mstar) < :log_1 Simon On Fri, Jan 15, 2016 at 2:23 PM, Brian Cherinka <havok2...@gmail.com> wrote: > Ahh. Thanks. Here is the class side then. Still None. > > In [14]: print datadb.Sample.nsa_logmstar > None > > Brian > > On Friday, January 15, 2016 at 8:48:30 AM UTC-5, Simon King wrote: >> >> "Sample()" is an instance. "Sample" is the class. Try: >> >> print datadb.Sample.nsa_logmstar >> >> Simon >> >> On Fri, Jan 15, 2016 at 1:46 PM, Brian Cherinka <havo...@gmail.com> >> wrote: >> >>> Hi Simon, >>> >>> Printing on the class side, I get >>> >>> In [11]: print datadb.Sample().nsa_logmstar >>> None >>> >>> It looks like it's getting set to None (or remaining None). I'm not >>> quite sure what this tells me, except that it's not working. Printing on >>> in the instance side, I get >>> >>> In [12]: print cube.sample[0].nsa_mstar >>> 1386160000.0 >>> >>> In [13]: print cube.sample[0].nsa_logmstar >>> 9.14181336239 >>> >>> nsa_mstar is a column in my database table, and nsa_logmstar I want to >>> be simply the log-base10 of that quantity. >>> >>> If this doesn't give any insight, then it will take me some time to >>> provide a small script. This code is embedded into a bunch of stuff. But >>> I'll work on it. >>> >>> Brian >>> >>> >>> On Friday, January 15, 2016 at 5:00:51 AM UTC-5, Simon King wrote: >>> >>>> On Fri, Jan 15, 2016 at 6:16 AM, Brian Cherinka <havo...@gmail.com> >>>> wrote: >>>> >>>>> I'm trying to set up a hybrid property / expression in a custom class, >>>>> that I can use in queries. I think I have the syntax correct, however the >>>>> query returns the entire table, instead of the correct subset of results. >>>>> And the where clause just indicates True rather than the correct >>>>> expression. >>>>> >>>>> >>>>> Here is my hybrid property/expression definition >>>>> >>>>> class Sample(Base,ArrayOps): >>>>> __tablename__ = 'sample' >>>>> __table_args__ = {'autoload' : True, 'schema' : 'datadb'} >>>>> >>>>> def __repr__(self): >>>>> return '<Sample (pk={0},cube={1})'.format(self.pk,self.cube) >>>>> >>>>> @hybrid_property >>>>> def nsa_logmstar(self): >>>>> try: return math.log10(self.nsa_mstar) >>>>> except ValueError as e: >>>>> return -9999.0 >>>>> except TypeError as e: >>>>> return None >>>>> >>>>> @nsa_logmstar.expression >>>>> def nsa_logmstar(cls): >>>>> return func.log(cls.nsa_mstar) >>>>> >>>>> The session query is >>>>> >>>>> session.query(Sample.pk).filter(Sample.nsa_logmstar < 9) >>>>> >>>>> But printing it does not show the appropriate condition. I get >>>>> >>>>> SELECT datadb.sample.pk AS datadb_sample_pk, >>>>> FROM datadb.sample >>>>> WHERE true >>>>> >>>>> and the results return the entire table of ~11000 rows instead of the >>>>> expected 272 rows. What's going on here? Everything looks correct to me, >>>>> but I can't figure it out. >>>>> >>>>> I'm expecting the SQL statement to look like this >>>>> >>>>> select s.pk >>>>> from datadb.sample as s >>>>> where log(s.nsa_mstar) < 9; >>>>> >>>>> Any thoughts? Thanks. >>>>> >>>>> >>>> I can't see anything obviously wrong with your code, but it looks like >>>> Sample.nsa_logmstar is not actually resolving to the hybrid property in >>>> your query. What happens if you "print Sample.nsa_logmstar" just before the >>>> query? >>>> >>>> Otherwise, please provide a small runnable script that demonstrates the >>>> problem. >>>> >>>> Simon >>>> >>> -- >>> 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. >>> >> >> -- > 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.