【发布时间】:2019-09-03 04:31:34
【问题描述】:
我正在尝试获取 SQLAlchemy 查询中不同对象类别的计数。 我的数据被组织成 3 个表格:
class Meeting(db.Model):
__tablename__ = 'meetings'
id = db.Column(db.Integer,
primary_key=True)
submissions = db.relationship('Submission',
backref='timeslot',
lazy=True)
class Submission(db.Model):
__tablename__ = 'submissions'
id = db.Column(db.Integer,
primary_key=True,
nullable=False)
meeting_id = db.Column(db.Integer,
db.ForeignKey('meetings.id'),
nullable=False)
_type = db.relationship('Act_types', lazy=True)
_type_id = db.Column(db.Integer, db.ForeignKey('acttypes.id'), Nullable=False)
class Act_types(db.Model):
__tablename__ = 'acttypes'
id = db.Column(db.Integer, primary_key=True)
action_type = db.Column(db.String(60))
逻辑如下:
用户为特定的Meeting 制作Submissions。每个Submission 都属于一个特定的Act_type:
Meeting->Submission->Act_Type
对于每个Meeting,我想获取有关存在多少特定类型的提交的信息。
Meeting -> Act_Type1-> count
Meeting -> Act_Type2-> count
等
我想通过 SQLAlchemy 查询获取信息,而不是使用循环。
目前,在数据库中,我有一个会议对象,6 个提交属于 2 种类型:
<Meeting 1>
[<Submission 1>, <Submission 2>, <Submission 3>, <Submission 4>, <Submission 5>, <Submission 6>]
[<Act_types 1>, <Act_types 2>]
如果我做一个简单的选择查询,我会得到以下结果:
subs = db.session.query(Meeting, Submission, Act_types).\
filter(Meeting.id == self.id).\
order_by(Act_types.action_type).\
group_by(Act_types.action_type).\
all()
> [(<Meeting 1>, <Submission 6>, <Act_types 2>), (<Meeting 1>, <Submission 6>, <Act_types 1>)]
我尝试了Group by & count function in sqlalchemy,但它没有给我想要的结果,只是计算了Act_Types 条目的数量。
<Meeting 1>
[(<Meeting 1>, <Submission 6>, <Act_types 2>, 6), (<Meeting 1>, <Submission 6>, <Act_types 1>, 6)]
所需的输出类似于:
[(<Meeting 1>, <Act_types 2>, 4), (<Meeting 1>, <Act_types 1>, 2)]
我如何做到这一点?
【问题讨论】:
标签: python group-by count sqlalchemy