sqlalchemy:在外键和关系中声明级联有什么区别?
在外键中声明级联与在关系中声明级联有什么区别sqlalchemy:在外键和关系中声明级联有什么区别?,sqlalchemy,Sqlalchemy,在外键中声明级联与在关系中声明级联有什么区别 class Contact(Base): __tablename__ = 'contacts' id = Column(Integer, primary_key=True) addresses = relation("Address", backref="contact") class Address(Base): __tablename__ = 'addresses' id = Column(Integer
class Contact(Base):
__tablename__ = 'contacts'
id = Column(Integer, primary_key=True)
addresses = relation("Address", backref="contact")
class Address(Base):
__tablename__ = 'addresses'
id = Column(Integer, primary_key=True)
contact_id = Column(Integer, ForeignKey('contact.id', onupdate="CASCADE", ondelete="CASCADE")))
vs
使用外键声明,级联似乎是在数据库级别执行的。关系方法是如何工作的?谢谢 在数据库级别执行外键级联是正确的。也许毫不奇怪,关系方法是在Python级别完成的。当父级的删除从会话刷新时,SQLAlchemy读取关系并向所有成员发出删除,处理任何其他级联
还要注意,如果使用数据库级联,您还需要配置关系以了解事实。因此,我应该真正将两者结合起来,以便关系了解数据库级联?请参阅被动更新和被动删除关系函数参数的文档:@AntsAasma提供的链接已更改为
class Contact(Base):
__tablename__ = 'contacts'
id = Column(Integer, primary_key=True)
addresses = relation("Address", backref="contact", cascade="all, delete-orphan")
class Address(Base):
__tablename__ = 'addresses'
id = Column(Integer, primary_key=True)
contact_id = Column(Integer, ForeignKey('contact.id'))