order_by() 方法在 peewee 中不起作用
order_by() method not working in peewee
我正在使用带有简单节目-季节-剧集模式的 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 子句,并手动应用它 returns 正确的降序。
我是 peewee 的新手,我见过很多使用 join() 结合 order_by() 的例子,但我仍然找不到我做错了什么。
这是由于在聚合查询结果包装器中处理嵌套集合时出现错误。
github 问题是:https://github.com/coleifer/peewee/issues/519
修复已合并到此处:https://github.com/coleifer/peewee/commit/ec0e87f1a480695d98bf1f0d7f2e63aed8dfc440
因此,要获得修复,您需要克隆 master 或等到应该在下周或两周内发布的下一个版本 (2.4.7)。
我正在使用带有简单节目-季节-剧集模式的 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 子句,并手动应用它 returns 正确的降序。
我是 peewee 的新手,我见过很多使用 join() 结合 order_by() 的例子,但我仍然找不到我做错了什么。
这是由于在聚合查询结果包装器中处理嵌套集合时出现错误。
github 问题是:https://github.com/coleifer/peewee/issues/519
修复已合并到此处:https://github.com/coleifer/peewee/commit/ec0e87f1a480695d98bf1f0d7f2e63aed8dfc440
因此,要获得修复,您需要克隆 master 或等到应该在下周或两周内发布的下一个版本 (2.4.7)。