我的SQLAlchemy模型:
class Cover(db.Model):
# ... a bunch of other fields ...
@hybrid_property
def number_of_requests(self):
if self.requests:
return len(self.requests)
return 0
@number_of_requests.expression
def number_of_requests(cls):
return func.count(cls.requests)
class Request(db.Model):
# ... a bunch of other fields ...
# Cover that this request is requesting
cover_id = db.Column(db.Integer, db.ForeignKey('cover.id')
cover = db.relationship('Cover',
backref=backref("requests", cascade="all, delete-orphan"))
因此,Cover和Request之间的简单的一对多关系。 number_of_requests
混合属性应返回与该特定封面关联的请求数。
现在,在我的一个Flask路线中,我试图通过请求数量来获取前5个封面。这就是现在的样子:
# Get top cover requests
covers = Cover.query.order_by(Cover.number_of_requests).limit(5).all()
不幸的是,这给出了
ProgrammingError :( ProgrammingError)缺少表" FROM"
的FROM子句条目
我怀疑这是因为number_of_requests(cls)
我试图计算requests
列表的大小,但SQLAlchemy没有在原始查询中包含请求表。有关如何做到这一点的任何想法,以避免出现此错误?
答案 0 :(得分:4)
将您的expression
部分更改为:
@number_of_requests.expression
def number_of_requests(cls):
return (select([func.count(Request.id)])
.where(Request.cover_id == cls.id))