Filter()从查询结果中删除空值

2024-04-28 20:47:18 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在尝试运行一个简单的查询来返回从人们那里收到的电子邮件数量。 数据模型如下:

class Email(Base):

    __tablename__ = "Email"

    id = Column(Integer, primary_key=True)
    author = Column(None, ForeignKey(Author.id))
    content = Column(String(500))
    date = Column(DateTime)

class Author(Base):

    __tablename__ = "Author"

    id = Column(Integer, primary_key=True)
    name = Column(String(500))

起初,我没有为那些没有发送任何电子邮件的作者获取任何值:

session.query(Author.name, func.count(Email.author)).outerjoin(Email).group_by(Author.name).all()

[('James', 1), ('John', 10), ('Jack', 0)]

然而,我认为外部连接可以帮助我。运行以下查询,我设法获得与每个作者关联的电子邮件数量:

session.query(Author.name, func.count(Email.author)).outerjoin(Email).group_by(Author.name).all()

[('James', 1), ('John', 10), ('Jack', 0)]

但是如果我尝试添加一个过滤条件,空值就会消失

session.query(Author.name, func.count(Email.author)).filter(Mail.date >= '2017-02-01').outerjoin(Email).group_by(Author.name).all()

[('James', 1), ('John', 10)]

我不明白为什么过滤器会在没有电子邮件的情况下删除作者(在外部连接之前执行所有过滤器之后?)


Tags: nameidby电子邮件emailsessioncountgroup