postgresql – SQLAlchemy查询显示错误“无法将表/可选’工作流
发布时间:2020-12-13 16:02:36 所属栏目:百科 来源:网络整理
导读:我写了一个SQL查询,我正在尝试移植到SQLAlchemy,但收到以下错误: sqlalchemy.exc.InvalidRequestError: Can't join table/selectable 'workflows' to itself SQL(工作): SELECT w.user_id,COUNT(l.id) FROM logs as lINNER JOIN workflows as w ON l.workf
我写了一个SQL查询,我正在尝试移植到SQLAlchemy,但收到以下错误:
sqlalchemy.exc.InvalidRequestError: Can't join table/selectable 'workflows' to itself SQL(工作): SELECT w.user_id,COUNT(l.id) FROM logs as l INNER JOIN workflows as w ON l.workflow_id = w.id WHERE l.type = 's' AND l.timestamp > extract(epoch from now()) - 86400 GROUP BY w.user_id; SQLAlchemy(不工作): session.query( Workflow.user_id,func.count(Log.id) ).join( Workflow,Workflow.id == Log.workflow_id ).where( Log.type == 's',Log.timestamp > time.time() - 86400 ).group_by( Workflow.user_id ).all() 这是预期的输出: +----------+---------+ | user_id | count | +----------+---------+ | 1 | 5 | | 2 | 10 | +----------+---------+ 我究竟做错了什么? 解决方法
部分.query(Workflow.user_id,func.count(Log.id))将Workflow和Log添加到您的查询中.第一个模型标记为主表,其他模型标记为辅助表.如果之后没有调用.join(),则主表和辅助表都将添加到FROM子句中.如果调用.join(),它会将接收的表移动到JOIN子句.这里重要的是.join()只能应用于辅助表.
问题是您调用.join(Workflow,Workflow.id == Log.workflow_id)会尝试将主表标记为已连接.要修复问题,您需要加入辅助表:.join(Log,Workflow.id == Log.workflow_id) 您可以添加 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |