"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 <havok2...@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+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.

Reply via email to