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