美好的一天, 我有一组表,其中一些表有多对一的关系。例如:
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)
正如您所看到的,几家公司可以属于同一行业。有没有人知道应该删除几家公司共享行业的公司对象的程序?显然,当其他公司对象存在时,我不会触及行业对象。
答案 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()