Несколько много для многих столов объединяются с sqlalchemy

Новое в 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)) 

Таким образом, этот код отражает следующие отношения:

  -------- --------- -------------- | User | --- N:M --- | Group | --- N:M --- | Department | -------- --------- -------------- 

Я пытался работать с объединениями, но мне все равно не удалось сделать следующее:

Один запрос sqlalchemy для получения всех экземпляров пользователей, зная имя отдела (скажем, «R & D»)

Это должно начинаться с:

 session.query(User).join(... or session.query(User).options(joinedLoad(... 

Кто-нибудь может помочь?

Спасибо за ваше время,

пьер

2 Solutions collect form web for “Несколько много для многих столов объединяются с sqlalchemy”

 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')) 

Почему бы вам не создать связь между таблицами ?

После его реализации, чтобы получить желаемое:

 list_of_rnd_users = [u for u in Users if 'R&D' in u.departments] 

где атрибут .departments был бы свойством для ваших отношений.

  • Неверный порядок сортировки по SQL-алхимии
  • Как присоединиться к трем таблицам с SQLalchemy и сохранить все столбцы в одной из таблиц?
  • SQLAlchemy: выбор столбцов объекта в запросе
  • Применение LIMIT и OFFSET ко всем запросам в SQLAlchemy
  • Может ли SQLAlchemy's session.merge () обновить свой результат с новыми данными из базы данных?
  • SQLALchemy DB Session with Flask, Postgres
  • Как написать условные предложения с использованием языка выражения SQLAlchemy?
  • python cx oracle ожидает строку, юникод или буферный объект
  • Python - лучший язык программирования в мире.