SQLAlchemy使用hyrid_propery表达式查询不同的记录

时间:2015-09-01 11:53:34

标签: python sqlite sqlalchemy

我在查询使用hybrid_propery.expression的类上的不同记录时遇到了一些问题。

查询班级中字段的不同记录正常工作:

session.query(foo).distinct(foo.some_field).group_by(foo.some_field)

除了使用表达式执行简单的选择:

session.query(foo).filter_by(expression_field=something)

但是如果我尝试使用表达式找到不同的记录:

session.query(foo).distinct(foo.expression_field).group_by(foo.expression_field)

它总是返回它找到的第一个记录。仅使用distinctgroup_by进行查询会导致返回所有记录。

这是我的类设置,我正在使用sqlite作为我的数据库:

class foo(Base):
    __tablename__ = 'foo'
    id = Column(Integer, primary_key=True)
    some_field = Column(Text(100))
    bar_id = Column(Integer, ForeignKey('bar.id'))

    bar = relationship('bar')

    @hybrid_property
    def expression_field(self):
        return self.bar.expression_field

    @expression_field.expression
    def expression_field(cls):
        return select([bar.expression_field]).where(cls.bar_id == bar.id).as_scalar()

class bar(Base)
    __tablename__ = 'bar'
    id = Column(Integer, primary_key=True)
    expression_field = Column(Text(100))

表达式或查询是否有问题?获得expression_field的不同值的解决方案是什么。

0 个答案:

没有答案