Trong SQLAlchemy, hãy tưởng tượng chúng ta có một bảng Foo
với một khóa chính hợp chất, và Bar
, trong đó có hai ép chính nước ngoài liên kết nó để Foo
(mỗi Bar
có hai Foo
đối tượng).SQLAlchemy: Nhiều phím nước ngoài để cùng bảng với hợp chất chính chủ chốt
Vấn đề của tôi là với chức năng relationship
, làm cho tôi lặp lại thông tin (trong số primaryjoin
) mà tôi đã đưa ra trong ForeightKeyConstraint
(vi phạm DRY). Có cách nào khác để cấu trúc điều này để tôi không phải lặp lại thông tin? Một số cách để chuyển số ForeignKeyConstraint
có liên quan đến 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)")
Cảm ơn.
Cảm ơn. Nhưng có IS lặp lại. Tôi nhận ra rằng nó không biết 'ForeignKeyConstraint' để sử dụng. Nhưng nếu, ví dụ tôi bằng cách nào đó có thể đưa ra một tham chiếu đến 'ForeignKeyConstraint' có liên quan đến' mối quan hệ', và nó có thể tìm ra biểu thức kết nối cho chính nó (giống như khi chỉ có một 'ForeignKeyConstraint' đến bảng đã cho) sau đó điều đó sẽ loại bỏ sự lặp lại các chi tiết của việc tham gia. – DaedalusFall
Đúng, và trên thực tế, như đã đề cập, có khả năng cung cấp 'ngoại lệ 'cho mối quan hệ, nhưng hiện tại nó không được sử dụng để suy ra điều kiện' primaryjoin'. Trường hợp của bạn là ví dụ tốt nơi nó có thể được sử dụng theo cách này. Nhưng như đã đề cập trong câu trả lời, * hiện tại * nó không có. Nhưng tại sao bạn không tạo một vé yêu cầu tính năng trên http://www.sqlalchemy.org/trac/ – van
Tôi sẽ làm như vậy, Muốn đảm bảo rằng tôi đã không bỏ lỡ một điều gì đó hiển nhiên, mà chủ yếu là trường hợp cho đến nay với những rắc rối SQLAlchemy của tôi! – DaedalusFall