说,我们有以下关系:
- 一个人可以有多个电子邮件地址
- 电子邮件服务提供商可以(显然)提供多个电子邮件地址
所以,这是多对多的关系。我有三个表:电子邮件、提供商和用户。电子邮件有两个用于提供者和用户的外国 ID。
现在,给定一个特定的人,我想打印所有电子邮件提供商及其为该人托管的电子邮件地址(如果存在)。(如果此人在 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)
,我想要的所有信息),但我后来发现这不是使用 FlaskBaseQuery
类,所以pagination
Flask-SQLAlchemy 提供的那个不起作用。显然db.session.query()
不是 Flask-SQLAlchemy Query 实例。
我尝试这样做,Emails.query.outerjoin[...]
但只返回电子邮件表中的列,尽管我想要提供者信息和电子邮件。
我的问题:我怎样才能用 Flask-SQLAlchemy 做同样的事情,这样我就不必重新实现已经存在的分页?
我想此时最简单的选择是实现我自己的分页功能,但我很想知道是否有另一种正确的方法来做到这一点。