SQLAlchemy 如何分组关系?

以下是模型:


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')>,])>]


慕田峪7331174
浏览 205回答 1
1回答
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Python