Python 具有多个筛选聚合的SQLAlchemy查询
假设我们有一个mysql pivot查询(取自pivto表问题的答案) )具有内部连接Python 具有多个筛选聚合的SQLAlchemy查询,python,mysql,sqlalchemy,Python,Mysql,Sqlalchemy,假设我们有一个mysql pivot查询(取自pivto表问题的答案) )具有内部连接 选择projects.org,SUM(ivt_incidents.severity='SEV3')作为 sev3_计数, 总和(ivt_事件。严重性='SEV2')作为SEV2_计数, 总和(ivt_事件。严重性='SEV1')作为SEV1_计数, 总和(ivt_事件。严重性='SEV0')作为SEV0_计数, 将(ivt_事件。严重性,如“%SEV%”的总和)作为 ivt_事件ivt_事件上的内部联接项目。
选择projects.org,SUM(ivt_incidents.severity='SEV3')作为
sev3_计数,
总和(ivt_事件。严重性='SEV2')作为SEV2_计数,
总和(ivt_事件。严重性='SEV1')作为SEV1_计数,
总和(ivt_事件。严重性='SEV0')作为SEV0_计数,
将(ivt_事件。严重性,如“%SEV%”的总和)作为
ivt_事件ivt_事件上的内部联接项目。jira_密钥=
projects.jira_key group by projects.org order by total_count;
正在查找有关构建sqlalchemy查询的帮助:
response = db.session.query(
func.sum(Incidents.severity).filter(Incidents.severity == 'SEV3'),
Projects.org).\
join(Projects, Projects.jira_key == Incidents.jira_key).\
group_by(Projects.org)
如果我运行它,它将接受查询,但是如果我调用
response.all()
编程错误:(mysql.connector.errors.ProgrammingError)1064(42000):您的SQL语法有错误;检查与您的MySQL服务器版本对应的手册,以获得正确的语法,将near'(其中ivt_events.severity='SEV3')作为anon_1,projects.org作为projects_org'在第1行[SQL:u'选择sum(ivt_events.severity)过滤器(其中ivt_events.severity=%(severity_1)s)作为第1项,projects.org作为projects\u org\n从ivt\u事件内部连接projects.jira\u key=ivt\u events.jira\u key GROUP BY projects.org'.[参数:{u'severity\u 1':'SEV3'](此错误的背景信息为:)
MySQL不支持✝️ 您试图在func.sum(…).filter(…)
中使用的SQL标准,它被编译为
SUM(...) FILTER (WHERE ...)
查看原始查询,应将谓词表达式作为SUM的参数传递:
response = db.session.query(
func.sum(Incidents.severity == 'SEV3'),
Projects.org).\
join(Projects, Projects.jira_key == Incidents.jira_key).\
group_by(Projects.org)
之所以只有在调用Query.all()
后才会出现错误,是因为此时查询才实际发送到数据库。在此之前,您刚刚构建了一个查询
对象
✝️: 有一种方法通过重写查询向MySQL添加过滤器支持。在
上。过滤器子句调用事件。严重性doh!真是个打字错误:)谢谢你的回复!db.session.query(func.count(incents.severity)、incents.severity、Projects.org).filter(incents.severity.in(['SEV2','SEV3','SEV1','SEV0','').join(Projects,Projects.jira_key==incents.jira_key).group_by(Projects.org,incents.severity)给我想要的结果。