Как разбить на страницы в Flask-SQLAlchemy для db.session объединенных запросов?
Скажем, у нас есть следующие отношения:
человек может иметь много адресов электронной почтыпоставщик услуг электронной почты может (очевидно) обслуживать несколько адресов электронной почтыИтак, это отношения многие ко многим. У меня есть три таблицы: электронные письма, провайдеры и пользователи. Письма имеют два внешних идентификатора для провайдера и пользователя.
Теперь, учитывая конкретного человека, я хочу напечатать всех поставщиков электронной почты и адрес электронной почты, который он размещает для этого человека, если он существует. (Если у человека нет электронной почты в Gmail, я все же хочу, чтобы Gmail был в результате. Я считаю, что в противном случае мне нужно только внутреннее соединение слева, чтобы решить эту проблему.)
Я понял, как это сделать с помощью следующих подзапросов (после учебника по sqlalchemy):
email_subq = db.session.query(Emails).\
filter(Emails.user_id==current_user.id).\
subquery()
provider_and_email = db.session.query(Provider, email_subq).\
outerjoin(email_subq, Provider.emails).\
all()
Это работает хорошо (возвращает 4 кортежа(Provider, user_id, provider_id, email_address)
, вся информация, которую я хочу), но я позже узнал, что этоне используя колбуBaseQuery
класс, так чтоpagination
предоставленный Flask-SQLAlchemy не работает. По всей видимостиdb.session.query()
не является экземпляром запроса Flask-SQLAlchemy.
Я пытался сделатьEmails.query.outerjoin[...]
но это возвращает только столбцы в таблице электронной почты, хотя я хочу и информацию о поставщике, и электронные письма.
Мой вопрос: как я могу сделать то же самое с Flask-SQLAlchemy, чтобы мне не пришлось повторно реализовывать нумерацию страниц, которая уже есть?
Я думаю, что самый простой вариант на данный момент - реализовать мою собственную функцию разбивки на страницы, но я бы хотел знать, есть ли другаяправильный способ сделать это.