У меня есть случай, когда я использую одну таблицу для хранения данных о пользователях и группах. Этот столбец называется профилем. Таким образом, в основном эта таблица представляет собой таблицу «многие ко многим» для случаев, когда один пользователь принадлежит ко многим группам или в одной группе есть много пользователей.SQLAlchemy рекурсивное отношение «многие ко многим»
Я немного запутался, как это должно быть описано ...
Вот упрощенная презентация класса.
user_group_table = Table('user_group', metadata,
Column('user_id', Integer,ForeignKey('profiles.id',
onupdate="CASCADE", ondelete="CASCADE")),
Column('group_id', Integer, ForeignKey('profiles.id',
onupdate="CASCADE", ondelete="CASCADE"))
)
class Profile(Base)
__tablename__ = 'profiles'
id = Column(Integer, autoincrement=True, primary_key=True)
name = Column(Unicode(16), unique=True) # This can be either user-/groupname
groups = relationship('Profile', secondary=user_group_table, backref = 'users')
users = relationship('Profile', secondary=user_group_table, backref = 'groups')
#Example of the usage:
user = Profile()
user.name = 'Peter'
salesGroup = Profile()
salesGroup.name = 'Sales'
user.groups.append(salesGroup)
salesGroup.users
>[peter]
Как правило, вам нужно иметь 3 таблицы - по одному для каждого из двух объектов в сравнении, а третье - записи, содержащие первичные ключи двух объектов, которые удовлетворяют соотношению. Это, я не уверен, что я понимаю вопрос ... –