来自唯一外键和主外键的SQLAlchemy主键

2024-05-16 07:27:25 发布

您现在位置:Python中文网/ 问答频道 /正文

我有两个表,报告和投标,有一对多的关系,一个报告可以有多个出价。简化报告如下所示:

class Report(Base):
    __tablename__ = 'reports'

    dr_nbr = Column(CHAR(14), primary_key=True)
    header_trade = Column(VARCHAR(255), unique=True)
    bids = relationship("BidDetail", lazy="dynamic")

bids表如下所示:

^{pr2}$

我尝试了几种方法从报表中导入这两个键并用作主键。我知道当我从另一个表中使用主外键时,我需要定义一个ForeignKeyConstraint,但是当一个外键是主外键而另一个外键是唯一的时,它就不起作用了。我尝试过的另一件事(通过研究SO上的类似问题)是将作为__table_args__的外键的两个字段作为UniqueConstraint传递,但我不确定我到底在做什么,它也不起作用。在

如何在SQLAlchemy中导入两个外键,其中一个是primary key,另一个是unique约束?在


Tags: keyreporttruebase关系报告column外键
1条回答
网友
1楼 · 发布于 2024-05-16 07:27:25

感谢@iljaeveriläilja everilä回答了评论中的问题。定义表的正确方法是:

class Report(Base):
__tablename__ = 'reports'

dr_nbr = Column(CHAR(14), primary_key=True)
header_trade = Column(VARCHAR(255))
__table_args__ = (UniqueConstraint(dr_nbr, header_trade),)
contacts = relationship(
                'Contact',
                secondary='report_contact_link'
)
bids = relationship("BidDetail", lazy="dynamic")

class BidDetail(Base):
__tablename__ = 'bids'

report_id = Column(CHAR(14), primary_key=True)
report_header_trade = Column(VARCHAR(255), primary_key=True)
__table_args__ = (ForeignKeyConstraint(
                        [report_id, report_header_trade],
                        [Report.dr_nbr, Report.header_trade]),
                 {})

相关问题 更多 >