Filter () удаляет пустое значение из результатов запроса - PullRequest
0 голосов
/ 22 мая 2019

Я пытаюсь выполнить простой запрос, чтобы получить количество писем, полученных от людей. Модель данных выглядит следующим образом:

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

Я не понимаю, почему фильтр удалит автора без электронной почты (после того, как весь фильтр будет выполнен перед внешним соединением?).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...