为了避免N + 1问题,我正在尝试获取一组表的所有信息。
我有一个名为Zone
的Peewee模型。另外,我还有一个名为MyObject
的对象。 MyObject
属于Zone
,因此在我的模型中,我已将MyObject.zone
声明为Foreign MyObject
作为相关参数(如何从区域中访问它)。
现在,我想检索zone
内部(包括所有列)的所有对象,以便通过JSON发送。
天真的方法是在for
内的Zone.select()
循环,然后在循环内获取每个Object
的信息。该方法的问题是我有很多条目,这将引起N + 1问题。
Peewee文档建议的方式是执行Join
,然后仅在一个查询中获取所有信息,如下所示:
Zone.select(Zone, MyObject).join(MyObject)
这里的问题是返回的查询有N个条目(其中N是对象数),每个条目都是一个Zone
,只有一个对象,这是错误的。它应该返回M个条目,其中M是Zone
的数量,并且在Zone.myobjects
的每个Zone
内,有一个列表,列出了属于该zone
的对象的数量
query = Zone.select(Zone,MyObject).join(Zone)
zones = list(query) # N zones, not M
zone[0].myobjects # It cointains a query template
我尝试制作一个group by
,但我也遇到了问题。
query = Zone.select(Zone,MyObject).join(Zone).group_by(MyObject.zone)
zones = list(query) # M zones, that is good but inside each zone, zone.lights has nothing and zone.myobjects is only one object no a list
zone[0].myobjects # It cointains a query template
我不知道如何进行。重要的是,要准备好访问所有列而不是作为模板查询,因为我有很多条目。