一对多关系中的多个外键 - SqlAlchemy

我是 SQL Alchemy 的新手,我需要帮助来实现以下关系:


我有两个表Trends和ClosestTrends,我想声明两个一对多关系:


表关系

在 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.AmbigouslyForeignKeysError:无法确定关系 Trends.closest_trends 上父/子表之间的联接条件 - 有多个外键路径链接这些表。指定“foreign_keys”参数,提供应被视为包含对父表的外键引用的列的列表。


有谁知道如何解决这个问题?


宝慕林4294392
浏览 201回答 1
1回答

胡说叔叔

根据官方网站,我是这样实现的。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):
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Python