在sqlalchemy中纠正混合表达

时间:2014-12-18 22:30:30

标签: postgresql sqlalchemy hybrid

我试图在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行。关于什么是问题的任何想法?

0 个答案:

没有答案