Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/66.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 具有多个筛选聚合的SQLAlchemy查询_Python_Mysql_Sqlalchemy - Fatal编程技术网

Python 具有多个筛选聚合的SQLAlchemy查询

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_事件上的内部联接项目。

假设我们有一个mysql pivot查询(取自pivto表问题的答案) )具有内部连接

选择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)给我想要的结果。