flask中多表查询

1,013 阅读1分钟

在项目中有可能会出现跨表查询多表字段的操作,这时候就有到多表查询的操作,例如下面项目:

这是我电影类:

这是我的排挡类:

这是我的订单类:

那么问题来了,如果我要所有电影票房进行排列给怎么做,一个很直观的做法是筛选所有的电影级联id等于当前电影id的排挡,在循环所有的排挡选出对应订单,在由订单得到订单金额再进行累加,比对其他电影信息进行排序。不过这样代码就很繁琐,有没有更加好的方法呢?

答案是有的。

在orm模块中的query文件中有一个join函数(Lib\site-packages\sqlalchemy\orm\query中)

join函数就是将从表数据备份到主表,从表的从表同样备份到主表,如下图所示:

利用这函数我们就可以做到不用以上的复杂编程就像如下就可以实现功能

result = model.session.query(Movies.id,Movies.showname,func.sum(MoveisOrder.o_price)).join(Movies.model_hall).join(HallMoviesModel.model_order).group_by(Movies.id).order_by(-func.sum(MoveisOrder.o_price)).all()

结果如下:

注意:

1.我的类中用了relationship进行反向引用,使用join时也应添加。

2.这种查询会增加主表的数据量,应视情况使用;

3.这次是我首次发表文章,如有错误请指出,谢谢