1 问题描述
使用连表查询避免N+1问题时
然后执行到118行报错AttributeError: ‘DebugInfo’ object has no attribute ‘admin_name’
然而, 把ORM语句翻译为的SQL复制到DataGrip的控制台中执行, 发现并没有问题
这可能是peewee ORM的bug, 它生成SQL语句是没有问题的, 但它没有动态赋予 'DebugInfo’对象’admin_name’属性
2 解决方案1
我们可以换一种写法, 给它加上分组和聚合, 这样这个对象就有该属性了
- 加了fn.Max(), 你才能够获取到DebugInfo.admin_name, 这可能是因为 Admin和DebugInfo 是一对多的关系. 但这样会导致只有一条记录, 因为只取最大值了
- 加了group_by, 这样每一条记录就是一个分组, 分组里取最大, 这样该生成多少条记录还是生成多少条记录
3 解决方案2
方案1可以解决, 但把问题搞复杂了, 希望有第二种更好的方案, 期待各位大佬回复补充