gpt4 book ai didi

python - 通过 SQLAlchemy 通过多个多对多关系进行选择

转载 作者:太空宇宙 更新时间:2023-11-04 01:26:15 26 4
gpt4 key购买 nike

我希望能够通过 SQLAlchemy 中的多个多对多关系进行查询。

我有用户,这些用户与组相关联,而组又与角色相关联。所有关联都是多对多的。我想通过组获取与用户关联的角色列表。

这是我的条纹羽绒服:

class User(Model):
id = Column(Integer)
groups = relationship('Group', secondary=user_group)

class Group(Model):
id = Column(Integer)
roles = relationship('Role', secondary=role_group)

class Role(Model):
id = Column(Integer)

我对将使用的 SQL 有一个大概的了解:

select distinct role.* from role, role_group
where role.id = role_group.role_id
and role_group.group_id in
(select "group".id from "group", user_group
WHERE user_group.user_id = 1
and "group".id = user_group."group.id")

但我很难弄清楚如何将其转换为 SQLAlchemy...而且我不确定这里的 SQL 是否是执行此操作的最佳方法。

最佳答案

试试这个

s = Session()
s.query(Role).join(User.groups).join(Group.roles).filter(User.id==1).all()

它将生成以下sql查询

SELECT role.id AS role_id 
FROM user
JOIN user_group AS user_group_1 ON user.id = user_group_1.user_id
JOIN "group" ON "group".id = user_group_1.group_id
JOIN role_group AS role_group_1 ON "group".id = role_group_1.group_id
JOIN role ON role.id = role_group_1.role_id
WHERE user.id = 1;

但是 sqlalchemy 只会返回不同的角色(如果您将查询 Role.id,则 sqlalchemy 将返回 sql 查询实际返回的内容)。

关于python - 通过 SQLAlchemy 通过多个多对多关系进行选择,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17692967/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com