【问题标题】:Decipher Peewee ORM Postgres query error解密 Peewee ORM Postgres 查询错误
【发布时间】:2015-01-14 06:29:58
【问题描述】:

我在我的 Flask 项目中使用 Peewee。我有一个在 SQLite 中工作的 ORM 查询,但现在在我迁移到 Postgres 时导致错误。我想知道是否有人可以帮助我诊断它:

stats = (
    Assignment.select(
        Type.name,
        fn.COUNT(Type.id).alias('total'),
        Assignment.select(
            fn.COUNT(Assignment.id)
        ).where(
            (Assignment.due_date < fn.Now()) & (StudentCourses.student == self) & (Assignment.type == Type.id)
        ).group_by(Assignment.type, StudentCourses.student).alias('completed')
    )
    .naive().join(Type)
    .join(StudentCourses, on=(StudentCourses.course == Assignment.course))
    .where(StudentCourses.student == self)
    .order_by(Type.id)
    .group_by(Type.name, StudentCourses.student)
)

这是生成的 SQL:

SELECT "t2"."name",
       COUNT("t2"."id") AS total,
  (SELECT COUNT("t4"."id")
   FROM "assignment" AS t4
   WHERE ((("t4"."due_date" < Now())
           AND ("t3"."student_id" = 2))
          AND ("t4"."type_id" = "t2"."id"))
   GROUP BY "t4"."type_id",
            "t3"."student_id") AS completed
FROM "assignment" AS t1
INNER JOIN "type" AS t2 ON ("t1"."type_id" = "t2"."id")
INNER JOIN "studentcourses" AS t3 ON ("t3"."course_id" = "t1"."course_id")
WHERE ("t3"."student_id" = 2)
GROUP BY "t2"."name",
         "t3"."student_id"
ORDER BY "t2"."id"

这是我得到的错误:

ProgrammingError: subquery uses ungrouped column "t2.id" from outer query
LINE 1: ...ND ("t3"."student_id" = 2)) AND ("t4"."type_id" = "t2"."id")...

我尝试将指示的列添加到 group_by 子句,但我没有得到任何爱。有人对此有任何指导吗?想要一双新鲜的眼睛。

【问题讨论】:

    标签: orm flask peewee


    【解决方案1】:

    您的子查询有效地加入了外部查询的 Type 表,因此 postgres 表示您需要在 COUNT 子查询中按 Type.id 进行分组。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-03-19
      • 1970-01-01
      • 2016-05-22
      相关资源
      最近更新 更多