Как разбить на страницы в 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, чтобы мне не пришлось повторно реализовывать нумерацию страниц, которая уже есть?

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

Ответы на вопрос(7)

Ваш ответ на вопрос