我在查询使用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)
它总是返回它找到的第一个记录。仅使用distinct
或group_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
的不同值的解决方案是什么。