sqlalchemy - 我可以在编写查询时指定关系的连接条件,而不是在我的模型类中这样做吗?
问题描述
我有三个模型...
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 字段进行排序并对结果进行分页。
解决方案
在我看来,您正在寻找AssociationProxy 模式
推荐阅读
- php - thinkphp5.0.x调试中的sql_injection漏洞
- javascript - 在下拉点击时,侧边栏需要变高
- java - 下面的 Java 代码没有显示代码中的任何错误,但它会抛出一个异常,说明非法选项。那么,缺少什么?
- angular - angular ngx-datatable ngFor 行不显示数据
- npgsql - 来自 Npgsql 二进制副本的外部“数字”值错误的无效登录
- nativescript - NativeScript Vue - 导航到其他组件同时保持具有配置文件信息的相同顶部的最佳方式?
- elasticsearch - Elasticsearch 日期范围问题
- node.js - nodeJS:如何在另一个异步函数调用的循环中调用异步函数
- c - 如果不包含标头,则使用 getenv 的什么实现?
- python - 将数据以多对多的方式嵌入到 mongo 文档中,但仍停留在如何