我在构造生成以下原始SQL查询所需的SQLAlchemy代码时遇到问题。
WITH RECURSIVE recruiters AS (
SELECT
recruiter.id
FROM
recruiter
JOIN
recruiter_member ON recruiter.id = recruiter_member.recruiter_id
WHERE
recruiter_member.user_id = 'f12c617a-415c-4f8c-add0-81a597545be8'
UNION ALL
SELECT
children.id
FROM
recrutiers AS parents,
recruiter AS children
WHERE
children.recruiter_id = parents.id
)
SELECT
*
FROM
recruiters
Run Code Online (Sandbox Code Playgroud)
这里的模型是Recruiter和RecruiterMember。我只是似乎没办法UNION正确。
没有更多细节,这是我能想到的最好的方法:
from sqlalchemy import orm
parent = orm.aliased(Recruiter)
child = orm.aliased(Recruiter)
top_q = (
orm.query.Query([Recruiter.id.label('id')])
.join(RecruiterMember, Recruiter.id == RecruiterMember.recruiter_id)
.filter(RecruiterMember.user_id == 'f12c617a-415c-4f8c-add0-81a597545be8')
.cte(recursive=True))
bottom_q = (
orm.query.Query([child.id.label('id')])
.join(parent, parent.id == child.recruiter_id))
final_query = top_q.union_all(bottom_q)
orm.query.Query([final_query.c.id]).with_session(session).all()
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2078 次 |
| 最近记录: |