Используя SQLAlchemy 0.7.1 и базу данных MySQL 5.1, я установил отношение «многие ко многим» следующим образом:
user_groups = Table('user_groups', Base.metadata,
Column('user_id', String(128), ForeignKey('users.username')),
Column('group_id', Integer, ForeignKey('groups.id'))
)
class ZKUser(Base, ZKTableAudit):
__tablename__ = 'users'
username = Column(String(128), primary_key=True)
first_name = Column(String(512))
last_name = Column(String(512))
groups = relationship(ZKGroup, secondary=user_groups, backref='users')
class ZKGroup(Base, ZKTableAudit):
__tablename__ = 'groups'
id = Column(Integer, primary_key=True)
name = Column(String(512))
Пользователи могут принадлежать к нескольким группам, а группы могут содержать несколько пользователей.
Я пытаюсь создать запрос SQLAlchemy, который возвращает из списка групп только пользователей, принадлежащих хотя бы к одной группе.
Я поиграл с функцией in_
, но, похоже, это работает только для проверки скалярных значений на членство в списке. Я не очень хорошо пишу на SQL, поэтому даже не знаю, какого типа оператор SELECT
это потребует.