我试图在SQLalchemy中构建一个简单的混合表达式作为执行更复杂表达的教程,但是我在使基础工作时遇到了一些麻烦。我基本上在数据库中有一个表,其中有一列填充了一组数字。我想为每一行汇总该列,并仅选择总数> =某个值的行,例如1000.我想采取这个SQL查询
select s.* from db.spaxel as s where ((select sum(f) from unnest(s.flux) as f) >= 1000.0);
工作,返回1024行中的136行,并将其转换为此SQLalchemy查询
subset = session.query(db.Spaxel).filter(db.Spaxel.sum >= 1000.0)
这是我的SQLalchemy类
class Spaxel(Base):
... table definition stuff ...
@hybrid_method
def sum(self,name=None):
total = sum(self.flux)
return total
@sum.expression
def sum(cls):
return select([func.sum(column('totalflux'))]).select_from(func.unnest(cls.flux).alias('totalflux'))
当我输入
时print db.Spaxel.sum()
我得到了
SELECT sum(totalflux) AS sum_1
FROM unnest(db.spaxel.flux) AS totalflux
看起来是正确的。但是当我输入
print session.query(db.Spaxel).filter(db.Spaxel.sum >= 1000.0)
我得到了
SELECT db.spaxel.pk AS db_spaxel_pk, db.spaxel.cube_pk AS db_spaxel_cube_pk
FROM db.spaxel
WHERE true
这是不正确的。我的SQLalchemy查询返回完整的1024行。关于什么是问题的任何想法?