首页 > 解决方案 > 我可以在编写查询时指定关系的连接条件,而不是在我的模型类中这样做吗?

问题描述

我有三个模型...

class Customer(db.Model, TimestampMixin):
    pk = db.Column(db.Integer, primary_key=True)
    name = db.Column(db.Text, nullable=False)

class User(db.Model, TimestampMixin):
    pk = db.Column(db.Integer, primary_key=True)
    name = db.Column(db.Text, nullable=False)

class CustomerUserStat(db.Model):
    __table_args__ = (
        UniqueConstraint("customer_pk", "user_pk", name="customer_pk_user_pk"),
    )
    pk = db.Column(db.Integer, primary_key=True)
    customer_pk = db.Column(db.Integer, db.ForeignKey("customers.pk"), nullable=False)
    user_pk = db.Column(db.Integer, db.ForeignKey("users.pk"), nullable=False)
    data = db.Column(db.Integer, nullable=False, default=0)

我试过了...

m.Customer.query.outerjoin(
  m.CustomerUserStat,
  (m.CustomerUserStat.user_pk == entity.pk)
  & (m.CustomerUserStat.customer_pk == m.Customer.pk)
).add_entity(m.CustomerUserStat)

但这给了我一个带有 Customer 对象和 CustomerUserStat 的元组(如果不存在,则为 None),接近但不是我想要的。

我还尝试将 userstats 关系添加到 Customer 模型和...

m.Customer.query.outerjoin(m.Customer.userstats
).filter(m.CustomerUserStat.user_pk == user.pk
).options(contains_eager(m.Customer.userstats))

但是,如果缺少用户的 CustomerUserStat 记录,则不会产生任何结果。

最终,我想编写一个查询,该查询将为我提供一个 Customer 对象列表,该列表具有一个属性,该属性具有我在查询中指定的用户的 CustomerUserStat 实例,并且我需要能够通过 CustomerUserStat.data 字段进行排序并对结果进行分页。

标签: sqlalchemyflask-sqlalchemy

解决方案


在我看来,您正在寻找AssociationProxy 模式


推荐阅读