Awesome. Thanks. Ok. I'll work on it again, and get back to you as soon as I can.
On Tuesday, August 2, 2016 at 3:57:10 PM UTC-4, Mike Bayer wrote: > > What I need is a complete .py file that sets up a *minimal* version of > *every* class required, then the Query object, then prints it. I'll > mangle it to do the right thing. > > Like this: > > from sqlalchemy import * > from sqlalchemy.orm import * > from sqlalchemy.ext.declarative import declarative_base > > Base = declarative_base() > > > class A(Base): > __tablename__ = 'a' > id = Column(Integer, primary_key=True) > bs = relationship("B") > > class B(Base): > __tablename__ = 'b' > id = Column(Integer, primary_key=True) > a_id = Column(ForeignKey('a.id')) > > > s = Session() > > q = s.query(A).join(B) > > print q > > > > > > > > On 08/02/2016 02:45 PM, Brian Cherinka wrote: > > So I managed to get something to return using this definition of the > > @expression, however, I'm not quite there yet. > > > > | @hybrid_property > > def restwave(self): > > if self.target: > > redshift = self.target.NSA_objects[0].z > > wave = np.array(self.wavelength.wavelength) > > restwave = wave/(1+redshift) > > return restwave > > else: > > return None > > > > @restwave.expression > > def restwave(cls): > > session = db.Session() > > nsaz = session.query(sampledb.NSA.z.label('z')).\ > > join(sampledb.MangaTargetToNSA, sampledb.MangaTarget, > Cube).\ > > > > filter(Cube.mangaid == cls.mangaid).subquery('nsaz', with_labels=True) > > > > unwave = > session.query((func.unnest(Wavelength.wavelength)/(1+nsaz.c.z)).label('restw')).subquery('unwave', > > with_labels=True) > > restwave = > session.query(func.array_agg(unwave.c.restw)).as_scalar() > > > > > > return restwave| > > > > Using the example query, > > > > | > > rwquery > > > =session.query(datadb.Cube.restwave).filter(datadb.Cube.mangaid=='1-113520') > > > rw =rwquery.first() > > | > > > > I am getting a modified wavelength array, but it's the wrong one, using > > the wrong ID. For the ID 1-113520 I should be modifying the wavelength > > array by (1+0.016765) and instead it's just grabbing the very first > > value in the NSA.z column, which corresponds to (1+0.099954). I think > > this is because my filter condition is not getting passed into the nsaz > > subquery, where it needs to go. Do you know how I can pass filter > > condition parameters down into any subqueries I may have in me > > expression select statements? Is that what .correlate() does? > > > > My query looks like > > > > | > > In[24]:printrwquery > > SELECT (SELECT array_agg(unwave.restw)AS array_agg_1 > > FROM (SELECT unnest(mangadatadb.wavelength.wavelength)/(%(z_1)s > > +nsaz.z)AS restw > > FROM mangadatadb.wavelength,(SELECT mangasampledb.nsa.z AS z > > FROM mangasampledb.nsa JOIN mangasampledb.manga_target_to_nsa ON > > mangasampledb.nsa.pk =mangasampledb.manga_target_to_nsa.nsa_pk JOIN > > mangasampledb.manga_target ON mangasampledb.manga_target.pk > > =mangasampledb.manga_target_to_nsa.manga_target_pk JOIN mangadatadb.cube > > ON mangasampledb.manga_target.pk =mangadatadb.cube.manga_target_pk > > WHERE mangadatadb.cube.mangaid =mangadatadb.cube.mangaid)AS nsaz)AS > > unwave)AS anon_1 > > FROM mangadatadb.cube > > WHERE mangadatadb.cube.mangaid =%(mangaid_1)s > > > > | > > > > > > > > -- 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.