簡體   English   中英

一對多關系中的多個外鍵 - SqlAlchemy

[英]Multiple foreign keys in one to many relationship - SqlAlchemy

我是 SQL Alchemy 的新手,我需要幫助來實現以下關系:

我有兩個表TrendsClosestTrends ,我想聲明兩個一對多關系:

表關系

在 SQL 中,它將是:

ALTER TABLE "closest_trends" ADD FOREIGN KEY ("id_trend_ref") REFERENCES "trends" ("id") ON DELETE CASCADE;

ALTER TABLE "closest_trends" ADD FOREIGN KEY ("id_trend_close") REFERENCES "trends" ("id") ON DELETE CASCADE;

我嘗試了以下實現:

class Trends(Base):
    __tablename__ = "trends"
    __table_args__ = (
        UniqueConstraint(
            "name", "id_region", "language_iso", name="name_id_region_language"
        ),
    )
    id = Column(Integer, primary_key=True, index=True, unique=True)
    .
    .
    .
    closest_trends = relationship("ClosestTrends", backref="Trends")
   
    def __str__(self):
        return "Trends"



class ClosestTrends(Base):
    __tablename__ = "closest_trends"
    __table_args__ = (
        UniqueConstraint(
            "id_trend_ref", "id_trend_close", name="id_trend_ref_id_trend_close"
        ),
    )
    id = Column(Integer, primary_key=True, index=True, unique=True)
    .
    .
    .
    
    id_trend_ref = Column(
        Integer, ForeignKey("trends.id", ondelete="CASCADE"), nullable=False
    )
    id_trend_close = Column(
        Integer, ForeignKey("trends.id", ondelete="CASCADE"), nullable=False
    )
    
    def __str__(self):
        return "ClosestTrends"

我不工作,我收到以下錯誤:

sqlalchemy.exc.AmbiguousForeignKeysError:無法確定關系 Trends.closest_trends 上父/子表之間的連接條件 - 有多個外鍵路徑鏈接表。 指定“foreign_keys”參數,提供應被視為包含對父表的外鍵引用的列的列表。

有誰知道如何解決這個問題?

非常感謝

您的解決方案寫在官方網站上。
https://docs.sqlalchemy.org/en/13/orm/join_conditions.html#handling-multiple-join-paths
根據官方網站,我是這樣實現的。

class Trends(Base):
    __tablename__ = "trends"
    __table_args__ = (
        UniqueConstraint(
            "name", "id_region", "language_iso", name="name_id_region_language"
        ),
    )
    id = Column(Integer, primary_key=True, index=True, unique=True)
    .
    .
    .
    # closest_trends = relationship("ClosestTrends", backref="Trends")
   
    def __str__(self):
        return "Trends"

class ClosestTrends(Base):
    __tablename__ = "closest_trends"
    __table_args__ = (
        UniqueConstraint(
            "id_trend_ref", "id_trend_close", name="id_trend_ref_id_trend_close"
        ),
    )
    id = Column(Integer, primary_key=True, index=True, unique=True)
    .
    .
    .
    
    id_trend_ref = Column(
        Integer, ForeignKey("trends.id", ondelete="CASCADE"), nullable=False
    )
    id_trend_close = Column(
        Integer, ForeignKey("trends.id", ondelete="CASCADE"), nullable=False
    )
    
    trend_ref = relationship("Trends", foreign_keys=[id_trend_ref])
    trend_close = relationship("Trends", foreign_keys=[id_trend_close])

    def __str__(self):

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM