SQLAlchemy 关系过滤器?

30 投票
2 回答
34023 浏览
提问于 2025-04-15 22:20

我可以这样做

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",
)

撰写回答