와 같은 테이블에 여러 외래 키는 각 Bar
두 Foo
개체가 (Foo
에 연결하는 두 개의 외래 키 제약을을 가지고있는 Bar
을 우리가 복합 기본 키가있는 테이블 Foo
을 상상하고,).SQLAlchemy의 : SQLAlchemy의 복합 기본 키
내 문제는 내가 ForeightKeyConstraint
(DRY를 위반)에서 이미 제공 한 정보 (primaryjoin
)를 반복하게하는 relationship
기능과 관련된 것입니다. 정보를 반복 할 필요가 없도록 이것을 구조화하는 다른 방법이 있습니까? 관련 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)")
감사합니다.
감사를 참조하십시오. 그러나 반복됩니다. 'ForeignKeyConstraint'를 사용할 지 알지 못합니다. 하지만 예를 들어, 관계형에 관련된 'ForeignKeyConstraint'에 대한 참조를 어떻게 든 부여 할 수 있고, 주어진 테이블에 'ForeignKeyConstraint'가 하나 밖에없는 경우처럼 자체에 대한 조인 식을 알아낼 수 있다면, 그러면 조인의 세부 사항이 반복적으로 제거됩니다. – DaedalusFall
사실, 언급했듯이 foreign_keys를 관계에 제공 할 가능성이 있지만 현재는 'primaryjoin' 조건을 유추하는 데 사용되지 않습니다. 당신의 경우는 이런 식으로 사용될 수있는 좋은 본보기입니다. 그러나 대답에서 언급했듯이, * 현재 * 그렇지 않습니다. 하지만 http://www.sqlalchemy.org/trac/에서 기능 요청 티켓을 만들지 마십시오. – van
나는 그 때까지 분명히 뭔가를 놓치지 않았 으면 좋겠다. 내 SQLAlchemy의 불황! – DaedalusFall