Представьте себе, что в SQLAlchemy у нас есть таблица Foo
с составным первичным ключом и Bar
с двумя ограничениями внешнего ключа, связывающими его с Foo
(каждый Bar
имеет два объекта Foo
).
Моя проблема связана с функцией relationship
, которая заставляет меня повторить информацию (в primaryjoin
), которую я уже дал в ForeightKeyConstraint
(нарушая DRY).Есть ли другой способ структурировать это так, чтобы мне не пришлось повторять информацию?Какой-то способ передачи соответствующего ForeignKeyConstraint
в relationship
?
class Foo(Base):
__tablename__ = "Foo"
id_1 = Column(Integer, primary_key=True)
id_2 = Column(Integer, primary_key=True)
class Bar(Base):
__tablename__ = "Bar"
id = Column(Integer, primary_key=True)
foo_1_id_1 = Column(Integer)
foo_1_id_2 = Column(Integer)
foo_2_id_1 = Column(Integer)
foo_2_id_2 = Column(Integer)
__table_args__ = (
ForeignKeyConstraint(
[foo_1_id_1,foo_1_id_2],
[Foo.id_1,Foo.id_2]
),
ForeignKeyConstraint(
[foo_2_id_1,foo_2_id_2],
[Foo.id_1,Foo.id_2]
)
)
foo_1 = relationship(Foo,primaryjoin="(Bar.foo_1_id_1 == Foo.id_1) & (Bar.foo_1_id_2 == Foo.id_2)")
foo_2 = relationship(Foo,primaryjoin="(Bar.foo_2_id_1 == Foo.id_1) & (Bar.foo_2_id_2 == Foo.id_2)")
Спасибо.