2015-01-31 464 views
1

不工作我使用一個SQLite後端用一個簡單的展示 - 季 - 集模式:ORDER_BY()方法peewee

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作爲我想要季節列表的節目的編號。 但是當我遍歷查詢用下面的代碼:

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

...我得到的一些東西,完全不下令,以及甚至不按照順序我會得到不使用ORDER_BY()即插入順序。

我激活了調試日誌以查看傳出查詢,並且查詢包含ORDER BY子句,並手動應用它返回正確的降序。

我是peewee的新手,我看到很多使用join()的例子與一個order_by()結合使用,但我仍然無法找出我做錯了什麼。

回答

2

這是由於在聚合查詢結果包裝中處理嵌套集合中的一個錯誤。

GitHub的問題是:https://github.com/coleifer/peewee/issues/519

的修復已經在這裏融合:https://github.com/coleifer/peewee/commit/ec0e87f1a480695d98bf1f0d7f2e63aed8dfc440

所以,讓你要麼需要克隆主機或等待直到下一個版本應該是在修復接下來的一兩週(2.4.7)。

+0

我只是等待發布,非常感謝修復! – rkohser 2015-02-01 10:26:18

+0

我剛剛測試沒有aggregate_rows(),它仍然沒有排序。 – rkohser 2015-02-01 14:06:11

+0

是的,沒有'aggregate_rows()'會有所不同 - 我假設你正在遍歷'season.episodes'?如果是這樣,你就會招致「N + 1」查詢問題。 – coleifer 2015-02-01 16:27:07