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 > <javascript:>> 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 <javascript:>. >> To post to this group, send email to sqlal...@googlegroups.com >> <javascript:>. >> 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.