SQLAlchemy 关系过滤器?
我可以这样做
table.relationship.filter( column = value )
来获取某些行的子集,用于关系吗?对于 order_by
也是一样吗?
2 个回答
52
使用 relationship()
并加上 lazy='dynamic'
这个选项,你会得到一个查询对象(叫做 AppenderQuery
),这个对象可以让你添加或删除项目。这样你就可以用 .filter()
或 .filter_by()
来筛选数据,还可以用 .order_by()
来排序。
16
根据relationship()
的文档,你可以在relationship
中使用order_by
这个参数,来设置返回结果的顺序。在同一页面上,它还提到你可以使用primaryjoin
这个参数来定义额外的连接条件。我觉得这可以用来实现你想要的过滤功能。
示例:
tasks = relationship(
"Task",
order_by="Task.priority",
primaryjoin="and_(Task.list_id==List.id, Task.completed==None)",
back_populates="task_list",
)