order_by()方法在peewee中不起作用

时间:2015-01-31 18:43:43

标签: orm peewee

我正在使用带有简单show-season - episode架构的SQLite后端:

class Show(BaseModel):
    name = CharField()

class Season(BaseModel):
    show = ForeignKeyField(Show, related_name='seasons')
    season_number = IntegerField()

class Episode(BaseModel):
    season = ForeignKeyField(Season, related_name='episodes')
    episode_number = IntegerField()

我需要以下查询:

seasons = (Season.select(Season, Episode)
       .join(Episode)
       .where(Season.show == SHOW_ID)
       .order_by(Season.season_number.desc(), Episode.episode_number.desc())
       .aggregate_rows())

SHOW_ID是我想要季节列表的节目的ID。 但是,当我使用以下代码迭代查询时:

for season in seasons:
    for episode in season.episodes:
        print(episode.episode_number)

...我得到的东西根本没有订购,甚至没有按照我没有使用order_by()的顺序,即插入顺序。

我激活了调试日志以查看传出查询,并且查询确实包含ORDER BY子句,并且手动应用它会返回正确的降序。

我是peewee的新手,我看到很多使用join()与order_by()结合的例子,但我仍然无法找出我做错了什么。

1 个答案:

答案 0 :(得分:2)

这是由于在聚合查询结果包装器中处理嵌套集合时出现错误。

github问题是:https://github.com/coleifer/peewee/issues/519

此修补程序已在此合并:https://github.com/coleifer/peewee/commit/ec0e87f1a480695d98bf1f0d7f2e63aed8dfc440

因此,要获得修复,您需要克隆master或等待下一个版本,该版本应该在下一周或两周(2.4.7)。