Я пытаюсь обдумать лучший способ построить отношения, которые отображают множество констант на множество предметов.
Мои начальные отношения, у Предмета есть Константа, выглядели так:
class Constant(Base):
__tablename__ = "Constant"
id = Column(Integer, primary_key=True, autoincrement=True)
name = Column(String(64), nullable=False)
class Item(Base):
__tablename__ = "Item"
id = Column(Integer, primary_key=True, autoincrement=True)
constantId = Column(Integer, ForeignKey("Constant.id"))
constant = relationship("Constant")
Однако мне действительно нужно, чтобы у моего предмета было более одной константы, что-то вроде этого ...
class Item(Base):
__tablename__ = "Item"
id = Column(Integer, primary_key=True, autoincrement=True)
constant1Id = Column(Integer, ForeignKey("Constant.id"))
constant1 = relationship("Constant")
constant2Id = Column(Integer, ForeignKey("Constant.id"))
constant2 = relationship("Constant")
Моей первой попыткой было использование таблицы ассоциации ...
item_to_constant_assoc = Table("itemToConstantAssoc", Base.metadata, Column("constantId", Integer, ForeignKey("Constant.id"), Column("itemId", Integer, ForeignKey("Item.id")))
при соответствующем обновлении класса Item:
Class Item(Base):
__tablename__ = "Item"
id = Column(Integer, primary_key=True, autoincrement=True)
constant1 = relationship("Constant", secondary=item_to_constant_assoc, uselist=False)
constant2 = relationship("Constant", secondary=item_to_constant_assoc, uselist=False)
Это не удалось (понятно, когдаглядя на таблицы MySQL, которые были созданы), потому что Item.constant1 и Item.constant2 ссылаются на одну и ту же запись в таблице ассоциации.
Мой следующий шаг - добавить еще одну таблицу ассоциации для второй константы, но мне интересно, не лаю ли я неправильное дерево, поскольку мне кажется, что я создаю большое количество таблиц для относительно простого отображения.Я прочитал документацию.Он подробный и содержательный (спасибо Майклу Байеру!), И я, возможно, только что пропустил раздел.Может ли кто-нибудь дать мне несколько указаний на эту проблему или на то, что я должен искать в документах?
Спасибо!* Phil * 1019