我遵循了一些教程,以便与sqlalchemy建立多对多关系。这工作得很好,我能够使用这些模型正确地插入和查询数据。但是,经过大量的努力,我无法简单地获取相关列的计数作为我的查询列之一。我将不胜感激任何建议。
replications = db.Table(
'replications',
db.Column('user_id', db.Integer, db.ForeignKey('user.id')),
db.Column('post_id', db.Integer, db.ForeignKey('post.id'))
)
class Post(db.Model):
id = db.Column(db.Integer, primary_key=True)
user_id = db.Column(db.Integer, db.ForeignKey('user.id'))
class User(db.Model):
id = db.Column(db.Integer, primary_key=True)
replications = db.relationship(
'Post',
secondary=replications,
backref=db.backref('replicators', lazy='dynamic'),
lazy='dynamic'
)
# these work
print(current_user.replications.count())
print(Post.query.get(2).replicators.count())
# these do not
db.session.query(Post.id, Post.replicators.count()) # ...
db.session.query(Post.id, func.count(Post.replicators)) # ...
为进一步说明,我想对帖子进行常规查询,对于返回的每一行,请查看具有该post_id的复制表中的行数。
我找到的最接近的解决方案是使用以下更基本的SQL:
db.session.query(Post.id, func.count(distinct(Post.replicators))).outerjoin(Post.replicators).group_by(Post.id)
这有几个问题:
希望找出是否有人能够更好地执行此相当简单的计数任务。