Как собрать много -to-many отношения с использованием SQLAlchemy: хороший пример

Я прочитал документацию по SQLAlchemy и учебник по построению отношения «многие ко многим», но не мог понять, как это сделать правильно, если таблица ассоциаций содержит более двух внешних ключей.

У меня есть таблица предметов, и каждый предмет содержит множество деталей. Детали могут быть одинаковыми для многих предметов, поэтому между элементами и деталями существует связь «многие-ко-многим»

У меня есть следующее:

class Item(Base):
    __tablename__ = 'Item'
    id = Column(Integer, primary_key=True)
    name = Column(String(255))
    description = Column(Text)

class Detail(Base):
    __tablename__ = 'Detail'
    id = Column(Integer, primary_key=True)
    name = Column(String)
    value = Column(String)

Моя ассоциативная таблица (она определена перед двумя другими в коде):

class ItemDetail(Base):
    __tablename__ = 'ItemDetail'
    id = Column(Integer, primary_key=True)
    itemId = Column(Integer, ForeignKey('Item.id'))
    detailId = Column(Integer, ForeignKey('Detail.id'))
    endDate = Column(Date)

В документации сказано что мне нужно использовать «объект ассоциации». Я не мог понять, как его правильно использовать, поскольку он смешал декларативно с формами сопоставления, и примеры кажутся неполными. Я добавил строку:

details = relation(ItemDetail)

как член класса Item и строку:

itemDetail = relation('Detail')

как член таблицы ассоциаций, как описано в документации.

, когда я делаю item = session.query (Item). first (), item.details - это не список объектов Detail, а список объектов ItemDetail.

Как я могу правильно получить детали в объектах Item, например, item. Details должен быть списком объектов Detail?

13
задан duduklein 22 April 2011 в 14:42
поделиться