【发布时间】:2015-03-11 18:24:13
【问题描述】:
假设以下型号,如何通过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')
我希望得到以下内容,但这不是有效的语法:
orders = db.session.query(Order).options(
db.subqueryload(Order.shipments).filter(Shipment.is_refunded==False))
一些背景:
- 订单到发货是一对多的关系。
- 根据业务规则,虽然一个订单可能有很多发货,但只能有一个“活动”发货。 IE。所有其他货件的
is_refunded状态将设置为True - 因此,我只对在遍历所有订单时引用“活跃”的货件感兴趣。
- subqueryload 返回的标准结果加载并返回所有货件
- 我正在使用最新的稳定版本的 SQLAlchemy。
如果需要任何说明,请告诉我。
提前致谢。
【问题讨论】:
标签: python python-3.x sqlalchemy