SQLalchemy 的新功能,这是我的问题:
我的模型是:
user_group_association_table = Table('user_group_association', Base.metadata,
Column('user_id', Integer, ForeignKey('user.id')),
Column('group_id', Integer, ForeignKey('group.id'))
)
department_group_association_table = Table('department_group_association', Base.metadata,
Column('department', Integer, ForeignKey('department.id')),
Column('group_id', Integer, ForeignKey('group.id'))
)
class Department(Base):
__tablename__ = 'department'
id = Column(Integer, primary_key=True)
name = Column(String(50))
class Group(Base):
__tablename__ = 'group'
id = Column(Integer, primary_key=True)
name = Column(String)
users = relationship("User", secondary=user_group_association_table, backref="groups")
departments = relationship("Department", secondary=department_group_association_table, backref="groups")
class User(Base):
__tablename__ = 'user'
id = Column(Integer, primary_key=True)
firstname = Column(String(50))
surname = Column(String(50))
因此,这段代码反射(reflect)了以下关系:
-------- --------- --------------
| User | --- N:M --- | Group | --- N:M --- | Department |
-------- --------- --------------
我尝试使用联接,但仍未成功执行以下操作:
一个 sqlalchemy 请求获取所有用户实例,同时知道部门名称(比如“研发”)
这应该开始于:
session.query(User).join(...
or
session.query(User).options(joinedLoad(...
有人可以帮忙吗?
谢谢你的时间,
皮埃尔
最佳答案
session.query(User).join((Group, User.groups)) \
.join((Department, Group.departments)).filter(Department.name == 'R&D')
这也有效,但使用了子选择:
session.query(User).join((Group, User.groups)) \
.filter(Group.departments.any(Department.name == 'R&D'))
关于python - 几个多对多表与 sqlalchemy 连接,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4679846/