Есть отношение многое ко многим для одной таблицы, т.е. элементы в этой таблицы могут быть подъэлементами из той же таблицы.
Для этого сделал две таблички:
class Item(Base):
__tablename__ = 'items'
id = Column(String, nullable=False, primary_key=True)
name = Column(String, unique=True, nullable=False)
set_item = relationship("ItemSet", foreign_keys="ItemSet.set_id")
item_set = relationship("ItemSet", foreign_keys="ItemSet.item_id")
class ItemSet(Base):
__tablename__ = 'item_set'
item_id = Column(String, ForeignKey('items.id', onupdate="CASCADE", ondelete="CASCADE"), primary_key=True)
set_id = Column(String, ForeignKey('items.id', onupdate="CASCADE", ondelete="CASCADE"), primary_key=True)
item = relationship("Item", foreign_keys='ItemSet.item_id')
items_set = relationship("Item", foreign_keys='ItemSet.set_id')
Отношения вроде работают, а вот добавить association_proxy, чтобы сразу выбирались все подэлементы или элементы в которые входит текущий никак не выходит. Пробую что-то в этом духе:
items = association_proxy(ItemSet.__tablename__, 'item')
sets = association_proxy(ItemSet.__tablename__, 'items_set')
SqlAlchemy 0.8.1, python 2.7.5