以下是模型:
class User(Base):
__tablename__ = 'users'
id = Column(CHAR, primary_key=True)
first_name = Column(CHAR)
last_name = Column(CHAR)
email = Column(CHAR)
receive_reports = Column(Boolean)
class MailPiece(Base):
__tablename__ = 'mail_pieces'
id = Column(CHAR, primary_key=True)
created_at = Column(DateTime)
template_id = Column(CHAR, ForeignKey('templates.id'))
class Template(Base):
__tablename__ = 'templates'
id = Column(CHAR, primary_key=True)
name = Column(CHAR)
created_by_id = Column(CHAR, ForeignKey('users.id'))
user = relationship(User, backref='templates')
我想向用户发送报告:他们发送了哪些模板以及为每个模板发送了多少邮件。
我写的代码:
stmt = self.session.query(MailPiece.template_id, func.count('*')
.label('mail_pieces_count')).filter(
MailPiece.created_at > day_ago,
MailPiece.created_at < now,
).group_by(MailPiece.template_id).subquery()
query = self.session.query(Template, stmt.c.mail_pieces_count).\
filter(Template.user.has(receive_reports=True)).\
join(stmt, Template.id == stmt.c.template_id)
但这有点不是我想要的。我得到了按模板分组的结果,但需要按用户分组的列表,每个用户都有模板。因此,通过这种方式,我可以遍历用户列表并向每个用户发送带有摘要的报告。
当前结果:
[<Template(id='123', name='Test', mail_pieces_count='123', user=<User(id=1212, first_name='Some name', last_name='Some lastname')>)>, <Template(id='456', name='Test2', mail_pieces_count='456', user=<User(id=1212, first_name='Some name', last_name='Some lastname')>)>]
预期结果:
[<User(id=1212, first_name='Some name', last_name='Some lastname, templates=[<Template(id='123', name='Test', mail_pieces_count='123')>, <Template(id='456', name='Test2', mail_pieces_count='456')>,])>]
相关分类