我正在尝试运行一个简单的查询,以返回从人们那里收到的电子邮件数量。 数据模型如下:
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)]
我不明白为什么过滤器会删除没有电子邮件的作者(在外部联接之前执行所有过滤器后?)。