sqlalchemy:仅在一列上有所区别

时间:2012-12-31 19:44:22

标签: python database sqlalchemy

我的表格如下:

    title      |    slug
------------------------------
The Title      | the-title
Another Title  | another-title
another title  | another-title

我想通过不同的slug选择,但也希望将标题作为结果的一部分返回。多次匹配返回哪个标题,我不在乎。

所以我的结果看起来像这样:

[('The Title', 'the-title'), ('Another Title', 'another-title')]

3 个答案:

答案 0 :(得分:3)

你可能想做类似的事情:

session.query(func.max(Table.title), Table.slug).group_by(Table.slug).all()

答案 1 :(得分:3)

您应该使用带有distinct子句的aggregate函数,而不是使用group by关键字。请考虑以下SQL来解决您的需求:

SELECT MAX(title), slug
  FROM yourtable
GROUP BY slug

group by子句将导致查询仅为slug的每个不同值返回一行。 max函数是一个聚合函数,它将返回每个组中title的最大值。这将给你一个标题,因为你不关心哪一个,这应该是你所需要的。

答案 2 :(得分:1)

你也可以用以下方法解决这个问题:

session.query(Table.title, Table.slug).distinct(Table.slug)

这也允许您在同一Table.id字段列表中返回其他字段(例如,您希望查看.query()),而无需单独的子查询。