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
<mailto:sqlalchemy+unsubscr...@googlegroups.com>.
To post to this group, send email to sqlalchemy@googlegroups.com
<mailto: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