为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

宝慕林4294392 2023-07-27 17:52:27
我是 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”参数,提供应被视为包含对父表的外键引用的列的列表。有谁知道如何解决这个问题?
查看完整描述

1 回答

?
胡说叔叔

TA贡献1804条经验 获得超8个赞

根据官方网站,我是这样实现的。

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):


查看完整回答
反对 回复 2023-07-27
  • 1 回答
  • 0 关注
  • 199 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号