假设下面的模型,我们将如何通过一个subqueryload
来装载与订单相关联的货物,并通过is_refunded
的状态进行过滤?在
class Order(db.Model):
id = db.Column(db.Integer, primary_key=True)
class Shipment(db.Model):
id = db.Column(db.Integer, primary_key=True)
shipment = db.Column(MutableDict.as_mutable(JSONB))
is_refunded = db.Column(db.Boolean, server_default="false")
order_id = db.Column(db.Integer, db.ForeignKey('order.id'))
order = db.relationship('Order', backref='shipments')
我希望有以下几行,但这不是有效的语法:
^{pr2}$一些背景:
is_refunded
状态将设置为True
如果需要澄清,请告诉我。在
提前谢谢。在
有趣的是,我一直在想一个简单的“选项”方法来做这类事情,所以上面的语法很有趣。在
但是,目前,通过relationship()设置的属性的约定是,它们只使用在relationship()中直接设置的条件。在使用所提供的加载程序服务的同时,没有简单的方法来动态更改条件。在
直接使用带有自定义条件的加载器服务的两个选项是:使用连接写出查询,然后与contains_eager结合使用(这适用于joinedload,而不是真正的subqueryload),或者使用满足所需条件的新relationship()(通过primaryjoin建立)。在
subqueryload还有另一个选项,即自己发出相同的查询,但实际上不使用subqueryload选项。这里的特殊技术是能够用查询的结果填充集合,这样就不会将这些结果记录为更改事件。为此使用了set_committed_value函数,一个示例说明了subqueryload的“原始”形式(在内置之前)说明了这一点,在DisjointEagerLoading处。对于绝大多数简单的情况,针对固定实体滚动您自己的“subqueryload”并不是很困难,在该示例中说明了该技术。在
相关问题 更多 >
编程相关推荐