SqlAlchemy Group Concat和OrderBy

时间:2017-01-04 06:12:17

标签: python sqlalchemy

movies_on_date = session.query(movies_showing,
                                       movies,
                                       func.group_concat(movies_showing.movie_showtime)\
                                            .label("showtimes"))\
                                            .filter(movies_showing.date == movie_date,
                                                    movies.movie_title == movies_showing.movie_title) \
                                            .group_by(movies_showing.movie_title)\
                                            .all()

我们如何进行小组连接并订购它们?

我试过了:

func.group_concat(movies_showing.movie_showtime).asc()

func.group_concat(movies_showing.movie_showtime.asc())

两者似乎都不起作用。我们如何实现这一目标?

2 个答案:

答案 0 :(得分:1)

我假设你的group_concat已经在工作,你只想为查询添加排序。如果是这种情况,我认为您使用您创建的"showtimes"标签作为排序参数,如下所示:

https://stackoverflow.com/a/15557759/1216837

所以我认为查询可以像这样稍加修改:

from sqlalchemy import desc

... 
.group_by(movies_showing.movie_title)\
.order_by(desc('showtimes')).all()
.all()

答案 1 :(得分:0)

.op是您的朋友,http://docs.sqlalchemy.org/en/latest/core/sqlelement.html#sqlalchemy.sql.operators.Operators.op

func.group_concat(movies_showing.op('ORDER BY')(movies_showing.movie_showtime.asc())

我认为这是sqlalchemy代码中的一个错误,因为他们会忽略这些错误" ORDER BY movie_showtime"在他们生成的SQL中,但这是如何解决它。