如何在peewee中添加连接数据列表?
How to add a list of joined data in peewee?
我有 2 个表:地下城和怪物。
在地下城我有2条记录和4条怪物记录。每个怪物都有一个 foreing key 链接到某个地牢。
我需要获取地牢列表,这样每个地牢都会有一个自己的列表,其中包含生活在其中的所有怪物。
我尝试这样做:
dungeons = list(Dungeons.select().join(Monsters))
它returns 4个条目:
1.地牢1怪物1
2.地下城1怪物2
3.地下城2怪物3
4.地下城2怪物4
但我需要这样的东西:
1.地牢1 [怪物1,怪物2]
2. 地下城2 [怪物3, 怪物4]
不熟悉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)
有一种更有效的方法:使用 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
我有 2 个表:地下城和怪物。 在地下城我有2条记录和4条怪物记录。每个怪物都有一个 foreing key 链接到某个地牢。
我需要获取地牢列表,这样每个地牢都会有一个自己的列表,其中包含生活在其中的所有怪物。
我尝试这样做:
dungeons = list(Dungeons.select().join(Monsters))
它returns 4个条目: 1.地牢1怪物1 2.地下城1怪物2 3.地下城2怪物3 4.地下城2怪物4
但我需要这样的东西: 1.地牢1 [怪物1,怪物2] 2. 地下城2 [怪物3, 怪物4]
不熟悉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)
有一种更有效的方法:使用 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