在SQLAlchemy中,假設我們有一個表Foo
用複合主鍵,Bar
,其中有連接這兩個外鍵約束,以Foo
(每個Bar
有兩個Foo
對象)。SQLAlchemy的:多個外鍵同桌複合主鍵
我的問題是與relationship
函數,這使我重複我已經在ForeightKeyConstraint
(違反DRY)給出的信息(在primaryjoin
)。有沒有其他的方式來構造這個,以便我不必重複信息?某種方式將相關的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 2012-01-15 23:36:30
確實如此,實際上,如上所述,可以爲關係提供'foreign_keys',但目前它不用於推斷'primaryjoin'條件。你的情況就是一個很好的例子,它可以以這種方式使用。但正如答案中提到的那樣,*目前*它沒有。但是,爲什麼你不在http://www.sqlalchemy.org/trac/ – van 2012-01-16 07:40:44
上創建一個功能請求票據,然後我想要確保我沒有失去一些明顯的東西,到目前爲止大部分都是這樣我的SQLAlchemy困境! – DaedalusFall 2012-01-16 13:13:34