如何在peewee中添加联接数据列表?

时间:2015-09-12 23:06:51

标签: python peewee

我有2张桌子:地下城和怪物。 在地下城里,我有2条记录和4条怪物记录。每个怪物都有一个外键,可以将它与某个地牢联系起来。

我需要获得一个地牢列表,这样每个地牢都会有一个列表,其中包含所有生活在其中的怪物。

我尝试这样做:

dungeons = list(Dungeons.select().join(Monsters))

它返回4个条目: 1.地牢1怪物1 地牢1怪物2 3.地牢2怪物3 4.地牢2怪物4

但我需要这样的事情: 地牢1 [monster1,monster2] 2.地下城2 [monster3,monster4]

2 个答案:

答案 0 :(得分:1)

有一种更有效的方法:使用prefetch()。它记录在"Avoiding N+1 queries" section

query = prefetch(Dungeon.select(), Monster.select())
for dungeon in query:
    print dungeon.name
    for monster in dungeon.monsters_prefetch:  # This is a list of monsters
        print '    *', monster.name

答案 1 :(得分:0)

不熟悉peewee,但你能用字典吗?

dungeons = {}
results = Dungeons.select().join(Monsters))
for row in results:
    if row.dungeon not in dungeons:
        dungeons[row.dungeon] = []
    dungeons[row.dungeon].append(row.monster)