python - 使用 Peewee ORM 生成图表数据

标签 python sql orm peewee

我正在构建一个网络应用程序,允许教授输入作业供学生遵循,如果您愿意的话,还可以提供交互式教学大纲。类(class)页面的其中一个部分显示进度。

我已经构建了一个饼图组件,我想用数据填充它:

pie_chart(
    title, # name of chart
    percent, # percentage of assignments completed
    count, # how many assignments completed
    total # how many assignments total
)

我正在使用 Peewee ORM 从我的分配表中检索此数据:

class Type(BaseModel):
    name = CharField() # Homework, Test, Final, etc.

class Assignment(BaseModel):
    name = CharField()
    due_date = DateField()
    type = ForeignKeyField(Type)
    course = ForeignKeyField(Course)

我需要数据库中的以下内容,但我不确定如何使用 Peewee 来完成它。获取名称和总数应该很简单。但我需要将 due_date 与今天的日期进行比较,以查看完成了多少作业。

名称已完成总数

决赛 2 0 家庭作业 23 12 测试4 2

如果重要的话,我的饼图输出将如下所示:

Homework
|XXX-------|
3 of 10 complete

更新

我有一个查询几乎可以完成我需要的所有操作。谁能帮我走完剩下的路吗?

这是查询:

select t.name,
        count(a.type_id) as total,
        (
            select count(id)
            from assignment a
            where a.course_id = 7
            and a.user_id = 3
            and a.due_date < date()
            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
and a.user_id = 3
group by a.type_id
order by a.type_id

这是使用下面示例数据的结果:

Homework, 8, 6
Test, 4, 6
Final, 2, 6

这确实很接近,但我希望完成的列特定于作业类型。

这是分配表中的一些示例数据

id name
------------------------
9, Chapter 1, 2014-11-01
10, Chapter 2, 2014-11-08
11, Test on chapter 1-2, 2014-11-15
12, Chapter 3, 2014-11-19
13, Chapter 4, 2014-11-22
14, Test on chapter 3-4, 2014-11-25
15, Midterm - Chapter 1-4, 2014-11-25
16, Chapter 5, 2014-11-25
17, Chapter 6, 2014-11-25
18, Test on chapter 5-6, 2014-11-25
19, Chapter 7, 2015-01-09
20, Chapter 8, 2015-01-11
21, Test on chapter 7-8, 2015-01-13
22, Final - Chapter 1-8, 2015-01-15

以下是我目前能想到的最好的。我正在对“已完成”列进行硬编码,因为我无法正确编码:

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

最佳答案

我认为您的问题是您的子查询返回不止一行 - 您应该将“and a.type_id = t.id”添加到子查询的位置。

关于python - 使用 Peewee ORM 生成图表数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27478109/

相关文章:

使用 MySQL 的 PHP 有时会返回错误,有时会返回错误,尽管我什么也没做

PHP/MySQL网站带有用户表,需要添加用户组功能

php - Kohana 3 ORM - 与静态方法的连接和 has_many 关系

c# - 无需创建 .edmx 的 Entity Framework

python - 使用 Python 在 Amazon Lambda 上调用 Google Sheets API 时出错

python - peewee 和 peewee 异步 : why is async slower

mysql - 使用来自另一列的符合特定条件的值更新一列

自动从数据库模式创建类的 Python ORM

python - 确定密文的字母频率

python - 如何更改数据库而不删除它 SQLAlchemy