将带有子查询的SQLite查询转换为Peewee语句

时间:2014-12-20 15:50:43

标签: sqlite orm peewee

我有一个SQL语句可以完成我需要的操作,但是我无法将其转换为相关的Peewee语句。这是我现在的SQL,请注意我现在正在使用子查询,但我不在乎它是否是子查询。

select t.name,
        count(a.type_id) as total,
        (
            select count(id)
            from assignment a
            where a.course_id = 7
            and a.due_date < date()
              and a.type_id = t.id
            group by a.type_id
            order by a.type_id
        ) as completed
from assignment a
inner join type t on t.id = a.type_id
where a.course_id = 7
group by a.type_id
order by a.type_id

这是我最接近Peewee声明的地方。目前我在查询中使用静态数字,只是为了让我有一个值可以在我的模板中使用,所以请忽略该部分。

Assignment.select(
    Type.name,
    fn.Lower('1').alias('completed'),
    fn.Count(Type.id).alias('total'),
).naive().join(Type).where(
    Assignment.course==self,
).group_by(Type.id).order_by(Type.id)

1 个答案:

答案 0 :(得分:2)

您是否尝试过将子查询作为select的一部分包含在内?

这样的东西?

query = (Assignment
 .select(
   Type.name, 
   fn.COUNT(Type.id).alias('total'), 
   Assignment.select(fn.COUNT(Assignment.id)).where(
     (Assignment.due_date < fn.DATE()) & 
     (Assignment.course == 7) &
     (Assignment.type == Type.id)
   ).group_by(Assignment.type).alias('completed'))
 .join(Type)
 .where(Assignment.course == 7)
 .group_by(Type.name))