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.

Reply via email to