Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/282.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/svn/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 如何查询数据库以获得一个列表,其中每个值是具有相同日期值的记录数的总和?_Python_Sqlalchemy - Fatal编程技术网

Python 如何查询数据库以获得一个列表,其中每个值是具有相同日期值的记录数的总和?

Python 如何查询数据库以获得一个列表,其中每个值是具有相同日期值的记录数的总和?,python,sqlalchemy,Python,Sqlalchemy,我正在使用SQLAlchemy对SQLite数据库执行查询。我正在做一个四表连接。其中一个表中的一个字段是datetime字段。我能够获得元组列表,其中包含符合我要查找的条件的所有记录。我想要得到的是一个列表,其中包含相同日期的记录的总和。因此,如果我有1条记录在某个时间,3条记录都在同一时间,但与第一条记录不同,我将获得列表[1,3] 以下是我当前的查询: rework\u records=DB.session.query(ReworkRecord,不合格记录,零件,产品)。加入( 不合格记录

我正在使用SQLAlchemy对SQLite数据库执行查询。我正在做一个四表连接。其中一个表中的一个字段是datetime字段。我能够获得元组列表,其中包含符合我要查找的条件的所有记录。我想要得到的是一个列表,其中包含相同日期的记录的总和。因此,如果我有1条记录在某个时间,3条记录都在同一时间,但与第一条记录不同,我将获得列表[1,3]

以下是我当前的查询:

rework\u records=DB.session.query(ReworkRecord,不合格记录,零件,产品)。加入(
不合格记录,不合格记录。id==返工记录。不合格记录\U id
).加入(
部分
).加入(
产品
).过滤器(
Product.id==form.Product\u family.data)。订单号(
描述(不合格记录录入日期)
).all()

这将返回元组列表,其中每个条目都有来自所联接的四个表中每个表的记录。

您只缺少一条
GROUP BY
语句。表达式
COUNT(*)
将提供给定输入日期的记录数

rework_records = DB.session.from_statement('''SELECT NonConformanceRecord.entry_date, COUNT(*) 
FROM ReworkRecord 
JOIN NonConformanceRecord ON NonConformanceRecord.id == ReworkRecord.nonconformance_id 
JOIN Part
JOIN Product
WHERE Product.id == form.product_family.data
GROUP BY NonConformanceRecord.entry_date
ORDER BY NonConformanceRecord.entry_date DESC''')
我不太熟悉你写它的方式,但我相信它只是:

rework_records = DB.session.query(NonConformanceRecord.entry_date, COUNT(*)).join(
        NonConformanceRecord, NonConformanceRecord.id == ReworkRecord.nonconformance_id
        ).join(
            Part
            ).join(
                Product
                ).filter(
                    Product.id == form.product_family.data).group_by(
                        NonConformanceRecord.entry_date).order_by(
                            desc(NonConformanceRecord.entry_date)
                        ).all()

在第二部分不起作用的情况下,最上面的一个应该做完全相同的事情。但是,我不知道从何处获得
form.product\u family.data
,因为您没有加入名为
form
的表,所以只缺少一条
GROUP BY
语句。表达式
COUNT(*)
将提供给定输入日期的记录数

rework_records = DB.session.from_statement('''SELECT NonConformanceRecord.entry_date, COUNT(*) 
FROM ReworkRecord 
JOIN NonConformanceRecord ON NonConformanceRecord.id == ReworkRecord.nonconformance_id 
JOIN Part
JOIN Product
WHERE Product.id == form.product_family.data
GROUP BY NonConformanceRecord.entry_date
ORDER BY NonConformanceRecord.entry_date DESC''')
我不太熟悉你写它的方式,但我相信它只是:

rework_records = DB.session.query(NonConformanceRecord.entry_date, COUNT(*)).join(
        NonConformanceRecord, NonConformanceRecord.id == ReworkRecord.nonconformance_id
        ).join(
            Part
            ).join(
                Product
                ).filter(
                    Product.id == form.product_family.data).group_by(
                        NonConformanceRecord.entry_date).order_by(
                            desc(NonConformanceRecord.entry_date)
                        ).all()

在第二部分不起作用的情况下,最上面的一个应该做完全相同的事情。但是,我不知道您从哪里获得
表单.product\u family.data
,因为您没有加入名为
表单的表

,这对我很有效,谢谢!我没有看到你的答案,最后只是对我发布的查询结果进行后处理(创建一个类似{date:[(record tuple)]}的字典,然后循环查询结果并添加到字典中)。然后我通过执行len([(record\u tuple)]就得到了给定日期的记录量。还将日期从datetime对象转换为格式化字符串,这样实际上会有具有相同“date”的记录,因为datetime对象在毫秒以下是特定的。这对我很有效,谢谢!我没有看到你的答案,最后只是对我发布的查询结果进行后处理(创建一个类似{date:[(record tuple)]}的字典,然后循环查询结果并添加到字典中)。然后我通过执行len([(record\u tuple)]就得到了给定日期的记录量。还将日期从datetime对象转换为格式化字符串,这样实际上会有具有相同“日期”的记录,因为datetime对象在毫秒以下是特定的。