【发布时间】:2013-12-12 20:18:11
【问题描述】:
我有一个模型,我想使用过滤器进行查询。我还希望将此过滤器应用于其子级(一对多的自引用关系)。示例:
class Item(Model):
__tablename__ = 'item'
id = Column(Integer, primary_key=True)
color = Column(String)
parent_id = Column(Integer, ForeignKey('item.id'))
children = relationship(
'Item',
backref=backref('parent', remote_side=[id]),
lazy='dynamic'
)
item = session.query(Item).filter(Item.color == 'blue').one()
现在我想在children 集合上应用一次相同的过滤器,以后能够以透明的方式访问过滤后的集合。
我可以想象这样的事情:
item.children.apply_filter(Item.color == 'blue') # `children` is dynamic
然后访问item.children 相当于现在访问item.children.filter(Item.color == 'blue').all()。请注意,使用此解决方案,关系是自引用的这一事实并不重要。
SQLAlchemy 的 API 非常庞大,我不知道是否有合适的方法来执行此操作(或类似的方法)。
(是否可以在查询时修改关系的primaryjoin?或者给它一个参数?)
【问题讨论】:
标签: python sqlalchemy