sqlalchemy python使用外键约束更新主键

时间:2015-05-29 18:12:21

标签: sqlalchemy constraints restriction

我需要在多个表中更改主键,这些表也有外键限制。我想要做更新或使用更新的主键复制条目并删除旧条目。我怎么能完成?

以下是我的表格的最小工作设置。 P和S依赖于S的主键,S依赖于H的主键。

我需要为一个条目更新ever表的值。由于约束,我不断改变价值。我宁愿不删除约束,因此这可以成为以后使用的永久解决方案。

class H(Base):
    __tablename__ = 'ch'
    a = Column(String(255), nullable=False, primary_key=True)
    other_columns = Column(String(255))

class S(Base):
    __tablename__ = 'cs'
    a = Column(String(255), ForeignKey('ch.a'), nullable=False, primary_key=True)
    sn = Column(Integer, nullable=False, primary_key=True)
    other_columns = Column(Date)
    header = relationship("H", backref=backref('cs', order_by=a, cascade='delete, all, delete-orphan'), foreign_keys='S.a')
    __table_args__ = (UniqueConstraint('a', 'sn', name='_a_sn_uc'),)

class P(Base):
    __tablename__ = 'cs_p'
    a = Column(String(255), nullable=False, primary_key=True)
    sn = Column(Integer, nullable=False, primary_key=True)
    ps = Column(Integer, nullable=False, primary_key=True)
    other_columns = Column(String(255))
    pa = relationship("S", backref=backref('cs_p', order_by=a, cascade='delete, all, delete-orphan'))
    __table_args__ = (UniqueConstraint('a', 'sn', 'ps', name='_a_sn_ps_uc'),
                      ForeignKeyConstraint([a, sn], [S.a, S.sn]),)

class F(Base):
    __tablename__ = 'cs_f'
    a = Column(String(255), nullable=False, primary_key=True)
    sn = Column(Integer, nullable=False, primary_key=True)
    fs = Column(Integer, nullable=False, primary_key=True)
    other_columns = Column(String(255))
    fa = relationship("S", backref=backref('cs_f', order_by=a, cascade='delete, all, delete-orphan'))
    __table_args__ = (UniqueConstraint('a', 'sn', 'fs', name='_a_sn_fs_uc'),
                      ForeignKeyConstraint([a, sn], [S.a, S.sn]),)

0 个答案:

没有答案