SQLAlchemy改变了关系

时间:2017-03-04 23:01:51

标签: python sql sqlalchemy

美好的一天, 我有一组表,其中一些表有多对一的关系。例如:

class Industry(Base):
    __tablename__ = 'industry'
    id = Column(Integer, Sequence('industry_id_seq'), nullable=False, unique=True, primary_key=True)
    name = Column(String(255), unique=True, nullable=False)
    companies = relationship('Company',backref=backref('industry',cascade='delete,all'))

class Company(Base):
    __tablename__ = 'company'
    id = Column(Integer, Sequence('company_id_seq'), nullable=False, unique=True, primary_key=True)
    industry_id = Column(Integer, ForeignKey(Industry.id), nullable=False)
    name = Column(String(255), unique=True, nullable=False)

正如您所看到的,几家公司可以属于同一行业。有没有人知道应该删除几家公司共享行业的公司对象的程序?显然,当其他公司对象存在时,我不会触及行业对象。

1 个答案:

答案 0 :(得分:1)

每个Company对象都将Industry id保留为定义的外键。如果你删除公司它不会有问题,因为行业标识只是一个参考,但如果你删除一个公司使用它的id的行业对象,那么将导致问题。没有行业,公司实例就不可能存在:

companies = session.query(Company).filter(industry.name=='Tech').all()
#can delete all companies of same industry
first_comp = session.query(Company).filter(industry.name=='Tech').first()
session.delete(first_comp)
session.commit()