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

时间:2019-05-22 16:25:02

标签: python sqlalchemy

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

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

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

0 个答案:

没有答案