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]: print rwquery 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.